public void readStructure(StructureContext<T> context) throws IOException {
		T newInstance = context.getStructureInstance();
		if (newInstance instanceof StructureReader<?> selfReader) {
			selfReader.readStructure();
		}
		else {
			for (FieldMappingInfo<T> fieldInfo : fields) {
				FieldContext<T> fieldReadContext = context.createFieldContext(fieldInfo, true);
				FieldReadFunction<T> readFunc = fieldInfo.getReaderFunc();
				if (readFunc == null) {
					throw new IOException("Missing read info for field: " + fieldInfo.getField());
				}
				Object value = readFunc.get(fieldReadContext);
				fieldInfo.assignField(fieldReadContext, value);
			}
			context.reader.setPointerIndex(context.getStructureEnd());
		}
		if (newInstance instanceof StructureVerifier structVerifier) {
			if (!structVerifier.isValid()) {
				throw new IOException(
					"Invalid data for struct @0x%x".formatted(context.structureStart));
			}
		}
	}
Deserializes a structure mapped instance by assigning values to its 
{@link FieldMapping &#64;FieldMapping mapped} java fields.

@param context {@link StructureContext}
@throws IOException if error reading the structure
Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format/golang/structmapping/StructureMappingInfo.java