blob: adad4d9b0b853f7c63d9c5c600794886e96b2f2d [file] [log] [blame]
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"required": [
"name",
"const_declarations",
"enum_declarations",
"interface_declarations",
"struct_declarations",
"union_declarations",
"declaration_order",
"declarations",
"library_dependencies"
],
"properties": {
"name": {
"$ref": "#/definitions/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"
}
},
"union_declarations": {
"type": "array",
"items": {
"$ref": "#/definitions/union"
}
},
"declaration_order": {
"type": "array",
"items": {
"$ref": "#/definitions/compound-identifier"
}
},
"declarations": {
"type": "object",
"patternProperties": {
".*": {
"type": "string",
"enum": [
"const",
"enum",
"interface",
"struct",
"union"
]
}
}
},
"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"
},
"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": {
"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": {
"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_default_value": {
"$ref": "#/definitions/constant"
}
}
},
"union": {
"type": "object",
"required": [
"name",
"members",
"size",
"alignment"
],
"properties": {
"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"
}
}
},
"library": {
"type": "object",
"properties": {}
},
"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"
}
}
},
"attribute-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",
"status",
"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": "object",
"required": [
"name"
],
"properties": {
"library": {
"$ref": "#/definitions/identifier"
},
"nested-decls": {
"type": "array",
"items": {
"$ref": "#/definitions/identifier"
}
},
"name": {
"$ref": "#/definitions/identifier"
}
}
},
"identifier": {
"type": "string",
"pattern": "^[_A-Za-z][_A-Za-z0-9]*$"
},
"size": {
"type": "integer",
"minimum": 0,
"maximum": 4294967295
}
}
}