{
    "$schema": "http://json-schema.org/draft-07/schema#",
    "definitions": {
        "coordinates": {
            "type": "object",
            "additionalProperties": false,
            "required": [
                "x",
                "y"
            ],
            "properties": {
                "x": {
                    "type": "number"
                },
                "y": {
                    "type": "number"
                },
                "z": {
                    "type": "number"
                }
            }
        }
    },
    "description": "Module specifications",
    "type": "object",
    "$comment": "Example key: 'magdeck'",
    "patternProperties": {
        ".*": {
            "type": "object",
            "required": [
                "labwareOffset",
                "dimensions",
                "calibrationPoint",
                "displayName",
                "loadName",
                "quirks"
            ],
            "additionalProperties": false,
            "properties": {
                "labwareOffset": {
                    "$ref": "#/definitions/coordinates"
                },
                "dimensions": {
                    "type": "object",
                    "required": [
                        "bareOverallHeight",
                        "overLabwareHeight"
                    ],
                    "properties": {
                        "bareOverallHeight": {
                            "type": "number"
                        },
                        "overLabwareHeight": {
                            "type": "number"
                        },
                        "lidHeight": {
                            "type": "number"
                        }
                    }
                },
                "calibrationPoint": {
                    "$ref": "#/definitions/coordinates"
                },
                "displayName": {
                    "type": "string"
                },
                "loadName": {
                    "type": "string"
                },
                "quirks": {
                    "type": "array",
                    "description": "List of quirks for a given module",
                    "items": {
                        "type": "string"
                    }
                }
            }
        }
    }
}