{ "$schema": "http://json-schema.org/draft-04/schema#", "type": "object", "required": [ "version", "name", "const_declarations", "enum_declarations", "interface_declarations", "struct_declarations", "table_declarations", "union_declarations", "declaration_order", "declarations", "library_dependencies" ], "properties": { "version": { "$ref": "#/definitions/version" }, "name": { "$ref": "#/definitions/library-identifier" }, "const_declarations": { "type": "array", "items": { "$ref": "#/definitions/const" } }, "enum_declarations": { "type": "array", "items": { "$ref": "#/definitions/enum" } }, "interface_declarations": { "type": "array", "items": { "$ref": "#/definitions/interface" } }, "struct_declarations": { "type": "array", "items": { "$ref": "#/definitions/struct" } }, "table_declarations": { "type": "array", "items": { "$ref": "#/definitions/table" } }, "union_declarations": { "type": "array", "items": { "$ref": "#/definitions/union" } }, "declaration_order": { "type": "array", "items": { "$ref": "#/definitions/compound-identifier" } }, "declarations": { "$ref": "#/definitions/declarations-map" }, "library_dependencies": { "type": "array", "items": { "$ref": "#/definitions/library" } } }, "definitions": { "const": { "type": "object", "required": [ "name", "type", "value" ], "properties": { "maybe_attributes": { "$ref": "#/definitions/attributes-list" }, "name": { "$ref": "#/definitions/compound-identifier" }, "type": { "$ref": "#/definitions/type" }, "value": { "$ref": "#/definitions/constant" } } }, "enum": { "type": "object", "required": [ "name", "type", "members" ], "properties": { "maybe_attributes": { "$ref": "#/definitions/attributes-list" }, "name": { "$ref": "#/definitions/compound-identifier" }, "type": { "$ref": "#/definitions/integer-type" }, "members": { "type": "array", "items": { "$ref": "#/definitions/enum-member" } } } }, "enum-member": { "type": "object", "required": [ "name", "value" ], "properties": { "name": { "$ref": "#/definitions/identifier" }, "maybe_attributes": { "$ref": "#/definitions/attributes-list" }, "value": { "$ref": "#/definitions/constant" } } }, "interface": { "type": "object", "required": [ "name", "methods" ], "properties": { "maybe_attributes": { "$ref": "#/definitions/attributes-list" }, "name": { "$ref": "#/definitions/compound-identifier" }, "methods": { "type": "array", "items": { "$ref": "#/definitions/interface-method" } } } }, "interface-method": { "type": "object", "required": [ "ordinal", "name", "has_request", "has_response" ], "properties": { "maybe_attributes": { "$ref": "#/definitions/attributes-list" }, "ordinal": { "$ref": "#/definitions/ordinal" }, "name": { "$ref": "#/definitions/identifier" }, "has_request": { "type": "boolean" }, "maybe_request": { "type": "array", "items": { "$ref": "#/definitions/interface-method-parameter" } }, "maybe_request_size": { "$ref": "#/definitions/size" }, "maybe_request_alignment": { "$ref": "#/definitions/size" }, "has_response": { "type": "boolean" }, "maybe_response": { "type": "array", "items": { "$ref": "#/definitions/interface-method-parameter" } }, "maybe_response_size": { "$ref": "#/definitions/size" }, "maybe_response_alignment": { "$ref": "#/definitions/size" } } }, "interface-method-parameter": { "type": "object", "required": [ "type", "name", "size", "alignment", "offset" ], "properties": { "type": { "$ref": "#/definitions/type" }, "name": { "$ref": "#/definitions/identifier" }, "size": { "$ref": "#/definitions/size" }, "alignment": { "$ref": "#/definitions/size" }, "offset": { "$ref": "#/definitions/size" } } }, "struct": { "type": "object", "required": [ "name", "members", "size" ], "properties": { "max_handles": { "$ref": "#/definitions/max-handles" }, "maybe_attributes": { "$ref": "#/definitions/attributes-list" }, "name": { "$ref": "#/definitions/compound-identifier" }, "members": { "type": "array", "items": { "$ref": "#/definitions/struct-member" } }, "size": { "$ref": "#/definitions/size" } } }, "struct-member": { "type": "object", "required": [ "type", "name", "size", "alignment", "offset" ], "properties": { "type": { "$ref": "#/definitions/type" }, "name": { "$ref": "#/definitions/identifier" }, "size": { "$ref": "#/definitions/size" }, "alignment": { "$ref": "#/definitions/size" }, "offset": { "$ref": "#/definitions/size" }, "maybe_attributes": { "$ref": "#/definitions/attributes-list" }, "maybe_default_value": { "$ref": "#/definitions/constant" } } }, "table": { "type": "object", "required": [ "name", "members", "size" ], "properties": { "max_handles": { "$ref": "#/definitions/max-handles" }, "maybe_attributes": { "$ref": "#/definitions/attributes-list" }, "name": { "$ref": "#/definitions/compound-identifier" }, "members": { "type": "array", "items": { "$ref": "#/definitions/table-member" } }, "size": { "$ref": "#/definitions/size" } } }, "table-member": { "type": "object", "required": [ "ordinal", "reserved" ], "properties": { "reserved": { "type": "boolean" }, "type": { "$ref": "#/definitions/type" }, "name": { "$ref": "#/definitions/identifier" }, "ordinal": { "$ref": "#/definitions/ordinal" }, "size": { "$ref": "#/definitions/size" }, "alignment": { "$ref": "#/definitions/size" }, "offset": { "$ref": "#/definitions/size" }, "maybe_default_value": { "$ref": "#/definitions/constant" } } }, "union": { "type": "object", "required": [ "name", "members", "size", "alignment" ], "properties": { "max_handles": { "$ref": "#/definitions/max-handles" }, "maybe_attributes": { "$ref": "#/definitions/attributes-list" }, "name": { "$ref": "#/definitions/compound-identifier" }, "members": { "type": "array", "items": { "$ref": "#/definitions/union-member" } }, "size": { "$ref": "#/definitions/size" }, "alignment": { "$ref": "#/definitions/size" } } }, "union-member": { "type": "object", "required": [ "type", "name", "size", "alignment", "offset" ], "properties": { "type": { "$ref": "#/definitions/type" }, "name": { "$ref": "#/definitions/identifier" }, "size": { "$ref": "#/definitions/size" }, "alignment": { "$ref": "#/definitions/size" }, "offset": { "$ref": "#/definitions/size" }, "maybe_attributes": { "$ref": "#/definitions/attributes-list" } } }, "declarations-map": { "type": "object", "patternProperties": { ".*": { "type": "string", "enum": [ "const", "enum", "interface", "struct", "table", "union" ] } } }, "library": { "type": "object", "required": [ "name", "declarations" ], "properties": { "name": { "$ref": "#/definitions/library-identifier" }, "declarations": { "$ref": "#/definitions/declarations-map" } } }, "type": { "oneOf": [ { "$ref": "#/definitions/array-type" }, { "$ref": "#/definitions/vector-type" }, { "$ref": "#/definitions/string-type" }, { "$ref": "#/definitions/handle-type" }, { "$ref": "#/definitions/request-type" }, { "$ref": "#/definitions/primitive-type" }, { "$ref": "#/definitions/identifier-type" } ] }, "array-type": { "type": "object", "required": [ "kind", "element_type", "element_count" ], "properties": { "kind": { "type": "string", "enum": [ "array" ] }, "element_type": { "$ref": "#/definitions/type" }, "element_count": { "$ref": "#/definitions/size" } } }, "vector-type": { "type": "object", "required": [ "kind", "element_type", "nullable" ], "properties": { "kind": { "type": "string", "enum": [ "vector" ] }, "element_type": { "$ref": "#/definitions/type" }, "maybe_element_count": { "$ref": "#/definitions/size" }, "nullable": { "type": "boolean" } } }, "string-type": { "type": "object", "required": [ "kind", "nullable" ], "properties": { "kind": { "type": "string", "enum": [ "string" ] }, "maybe_element_count": { "$ref": "#/definitions/size" }, "nullable": { "type": "boolean" } } }, "handle-type": { "type": "object", "required": [ "kind", "subtype", "nullable" ], "properties": { "kind": { "type": "string", "enum": [ "handle" ] }, "subtype": { "$ref": "#/definitions/handle-subtype" }, "nullable": { "type": "boolean" } } }, "request-type": { "type": "object", "required": [ "kind", "subtype", "nullable" ], "properties": { "kind": { "type": "string", "enum": [ "request" ] }, "subtype": { "$ref": "#/definitions/compound-identifier" }, "nullable": { "type": "boolean" } } }, "attributes-list": { "type": "array", "items": { "$ref": "#/definitions/attribute" } }, "attribute": { "type": "object", "required": [ "name", "value" ], "properties": { "name": { "type": "string" }, "value": { "type": "string" } } }, "primitive-type": { "type": "object", "required": [ "kind", "subtype" ], "properties": { "kind": { "type": "string", "enum": [ "primitive" ] }, "subtype": { "$ref": "#/definitions/primitive-subtype" } } }, "identifier-type": { "type": "object", "required": [ "kind", "identifier", "nullable" ], "properties": { "kind": { "type": "string", "enum": [ "identifier" ] }, "identifier": { "$ref": "#/definitions/compound-identifier" }, "nullable": { "type": "boolean" } } }, "constant": { "oneOf": [ { "$ref": "#/definitions/identifier-constant" }, { "$ref": "#/definitions/literal-constant" } ] }, "identifier-constant": { "type": "object", "required": [ "kind", "identifier" ], "properties": { "kind": { "type": "string", "enum": [ "identifier" ] }, "identifier": { "$ref": "#/definitions/compound-identifier" } } }, "literal-constant": { "type": "object", "required": [ "kind", "literal" ], "properties": { "kind": { "type": "string", "enum": [ "literal" ] }, "literal": { "$ref": "#/definitions/literal" } } }, "literal": { "oneOf": [ { "$ref": "#/definitions/string-literal" }, { "$ref": "#/definitions/numeric-literal" }, { "$ref": "#/definitions/true-literal" }, { "$ref": "#/definitions/false-literal" }, { "$ref": "#/definitions/default-literal" } ] }, "string-literal": { "type": "object", "required": [ "kind", "value" ], "properties": { "kind": { "type": "string", "enum": [ "string" ] }, "value": { "type": "string" } } }, "numeric-literal": { "type": "object", "required": [ "kind", "value" ], "properties": { "kind": { "type": "string", "enum": [ "numeric" ] }, "value": { "type": "string" } } }, "true-literal": { "type": "object", "required": [ "kind" ], "properties": { "kind": { "type": "string", "enum": [ "true" ] } } }, "false-literal": { "type": "object", "required": [ "kind" ], "properties": { "kind": { "type": "string", "enum": [ "false" ] } } }, "default-literal": { "type": "object", "required": [ "kind" ], "properties": { "kind": { "type": "string", "enum": [ "default" ] } } }, "handle-subtype": { "type": "string", "enum": [ "handle", "process", "thread", "vmo", "channel", "event", "port", "interrupt", "log", "socket", "resource", "eventpair", "job", "vmar", "fifo", "guest", "timer" ] }, "primitive-subtype": { "oneOf": [ { "type": "string", "enum": [ "bool", "float32", "float64" ] }, { "$ref": "#/definitions/integer-type" } ] }, "integer-type": { "type": "string", "enum": [ "int8", "int16", "int32", "int64", "uint8", "uint16", "uint32", "uint64" ] }, "ordinal": { "type": "integer", "minimum": 1, "maximum": 4294967295 }, "compound-identifier": { "type": "string", "pattern": "([_A-Za-z][_A-Za-z0-9]*-)*[_A-Za-z][_A-Za-z0-9]*/[_A-Za-z][_A-Za-z0-9]*" }, "identifier": { "type": "string", "pattern": "^[_A-Za-z][_A-Za-z0-9]*$" }, "library-identifier": { "type": "string", "pattern": "([_A-Za-z][_A-Za-z0-9]*-)*[_A-Za-z][_A-Za-z0-9]*" }, "max-handles": { "type": "integer", "minimum": 0, "maximum": 4294967295 }, "size": { "type": "integer", "minimum": 0, "maximum": 4294967295 }, "version": { "type": "string", "pattern": "^[0-9]+\\.[0-9]+\\.[0-9]+$" } }, "additionalProperties": false }