@SuppressWarnings("unchecked")
	private boolean processStructure(Map<String, Object> result) throws InvalidDataTypeException {
		String name = (String) result.get("name");
		CategoryPath path = getCategoryPath(result);
		int size = DEFAULT_SIZE;
		if (result.get("size") != null) {
			size = (int) (double) result.get("size");
		}
		Structure struct = new StructureDataType(path, name, size, dataManager);
		processSettings(result, struct.getDefaultSettings());

		String comment = getRegularComment(result);
		if (comment != null) {
			struct.setDescription(comment);
		}
		Object alignmentMin = result.get("explicitMinimumAlignment");
		if (alignmentMin != null) {
			struct.setExplicitMinimumAlignment((int) (double) alignmentMin);
		}
		
		String packing = (String) result.get("packed");
		if (packing != null) {
			isPacked.put(getPath(struct), Boolean.valueOf(packing));
			// NB: not this - struct.setPackingEnabled(Boolean.valueOf(packing));
			Object epval = result.get("explicitPackingValue");
			if (epval != null) {
				packingValue.put(getPath(struct), (int) (double) epval);
			}
		}

		dataTypes.put(getPath(struct), struct);

		boolean processedAll = true;
		Map<String, Object> fields = (Map<String, Object>) result.get("fields");
		for (Entry<String, Object> entry : fields.entrySet()) {
			processedAll &= processStructMembers(entry, struct);
		}
		if (processedAll) {
			addDataType(getPath(struct), struct);
		} else {
			dataTypes.put(getPath(struct), struct);
		}
		return processedAll;
	}
Reads the datatypes encoded in SARIF from the specified SARIF parser and
recreates them in a datatype manager.

@param result  the SARIF parser
@param monitor the task monitor
@throws SAXParseException  if an SARIF parse error occurs
@throws CancelledException if the user cancels the read operation
Ghidra/Features/Sarif/src/main/java/sarif/managers/DataTypesSarifMgr.java