blob: cff53d4384862a70a84ad5e1fa9b2034651f9ff2 [file] [log] [blame]
{
"$schema": "http://json-schema.org/draft-04/schema#",
"additionalProperties": false,
"definitions": {
"array-type": {
"additionalProperties": false,
"description": "Definition of array type",
"patternProperties": {
"^experimental_": {}
},
"properties": {
"element_count": {
"$ref": "#/definitions/count",
"description": "Number of elements in array type"
},
"element_type": {
"$ref": "#/definitions/type",
"description": "Element type of array type"
},
"kind": {
"description": "Selection of base type as array type",
"enum": [
"array"
],
"type": "string"
},
"type_shape_v2": {
"$ref": "#/definitions/typeshape",
"description": "Type shape of this declaration"
}
},
"required": [
"kind",
"element_type",
"element_count",
"type_shape_v2"
],
"type": "object"
},
"string-array-type": {
"additionalProperties": false,
"description": "Definition of string_array type",
"patternProperties": {
"^experimental_": {}
},
"properties": {
"element_count": {
"$ref": "#/definitions/count",
"description": "Number of UTF8 octets in string_array type"
},
"kind": {
"description": "Selection of base type as string_array type",
"enum": [
"string_array"
],
"type": "string"
},
"type_shape_v2": {
"$ref": "#/definitions/typeshape",
"description": "Type shape of this declaration"
}
},
"required": [
"kind",
"element_count",
"type_shape_v2"
],
"type": "object"
},
"attribute": {
"additionalProperties": false,
"description": "Definition of an attribute list element",
"patternProperties": {
"^experimental_": {}
},
"properties": {
"arguments": {
"$ref": "#/definitions/attribute-args-list",
"description": "Attribute arguments"
},
"location": {
"$ref": "#/definitions/location",
"description": "Source location of the declaration"
},
"name": {
"description": "Attribute name",
"type": "string"
}
},
"required": [
"name",
"arguments"
],
"type": "object"
},
"attribute-arg": {
"additionalProperties": false,
"description": "Definition of an attribute argument",
"patternProperties": {
"^experimental_": {}
},
"properties": {
"location": {
"$ref": "#/definitions/location",
"description": "Source location of the attribute argument"
},
"name": {
"description": "Name of the attribute argument",
"type": "string"
},
"type": {
"$ref": "#/definitions/attribute-arg-type",
"description": "Attribute argument type"
},
"value": {
"$ref": "#/definitions/constant",
"description": "Value of the attribute argument"
}
},
"required": [
"name",
"type",
"value"
],
"type": "object"
},
"attribute-arg-type": {
"description": "Definition of an attribute argument type",
"oneOf": [
{
"$ref": "#/definitions/primitive-subtype"
},
{
"enum": [
"string"
],
"type": "string"
}
]
},
"attribute-args-list": {
"additionalProperties": false,
"description": "Definition of an attributes argument list",
"items": {
"$ref": "#/definitions/attribute-arg",
"description": "List of arguments"
},
"patternProperties": {
"^experimental_": {}
},
"type": "array"
},
"attributes-list": {
"additionalProperties": false,
"description": "Definition of an attribute list",
"items": {
"$ref": "#/definitions/attribute",
"description": "List of attributes"
},
"patternProperties": {
"^experimental_": {}
},
"type": "array"
},
"binary-operator-constant": {
"additionalProperties": false,
"description": "Definition of a constant value (using a binary operator)",
"patternProperties": {
"^experimental_": {}
},
"properties": {
"expression": {
"description": "Expression used in source code to define the constant",
"type": "string"
},
"kind": {
"description": "Selection of constant value using a literal",
"enum": [
"binary_operator"
],
"type": "string"
},
"value": {
"description": "Evaluated value of the constant",
"type": "string"
}
},
"required": [
"kind",
"value",
"expression"
],
"type": "object"
},
"bits": {
"additionalProperties": false,
"description": "Definition of a bits declaration",
"patternProperties": {
"^experimental_": {}
},
"properties": {
"deprecated": {
"description": "True if the element is deprecated in the target version",
"type": "boolean"
},
"location": {
"$ref": "#/definitions/location",
"description": "Source location of the declaration"
},
"mask": {
"description": "Mask of all members",
"type": "string"
},
"maybe_attributes": {
"$ref": "#/definitions/attributes-list",
"description": "Optional list of attributes of the bits declaration"
},
"members": {
"description": "List of bits members",
"items": {
"$ref": "#/definitions/bits-member"
},
"type": "array"
},
"name": {
"$ref": "#/definitions/compound-identifier",
"description": "Fully qualified name of the bits"
},
"naming_context": {
"$ref": "#/definitions/naming-context",
"description": "Naming context of the bits"
},
"strict": {
"description": "Strictness of the bits",
"type": "boolean"
},
"type": {
"$ref": "#/definitions/type",
"description": "Type of the bits"
}
},
"required": [
"deprecated",
"location",
"mask",
"members",
"name",
"strict",
"type"
],
"type": "object"
},
"bits-member": {
"additionalProperties": false,
"description": "Definition of an bits member",
"patternProperties": {
"^experimental_": {}
},
"properties": {
"deprecated": {
"description": "True if the element is deprecated in the target version",
"type": "boolean"
},
"location": {
"$ref": "#/definitions/location",
"description": "Source location of the declaration"
},
"maybe_attributes": {
"$ref": "#/definitions/attributes-list",
"description": "Optional list of attributes of the bits member"
},
"name": {
"$ref": "#/definitions/identifier",
"description": "Name of the bits member"
},
"value": {
"$ref": "#/definitions/constant",
"description": "Value of the bits member"
}
},
"required": [
"deprecated",
"location",
"name",
"value"
],
"type": "object"
},
"compose": {
"additionalProperties": false,
"description": "Compose member of a protocol declaration",
"patternProperties": {
"^experimental_": {}
},
"properties": {
"deprecated": {
"description": "True if the element is deprecated in the target version",
"type": "boolean"
},
"location": {
"$ref": "#/definitions/location",
"description": "Source location of the compose declaration"
},
"maybe_attributes": {
"$ref": "#/definitions/attributes-list",
"description": "Optional list of attributes of the compose declaration"
},
"name": {
"$ref": "#/definitions/compound-identifier",
"description": "Name of the composed protocol"
}
},
"required": [
"deprecated",
"location",
"name"
],
"type": "object"
},
"compound-identifier": {
"description": "Definition of compound identifier",
"pattern": "([_A-Za-z][_A-Za-z0-9]*-)*[_A-Za-z][_A-Za-z0-9]*/[_A-Za-z][_A-Za-z0-9]*",
"type": "string"
},
"const": {
"additionalProperties": false,
"description": "Definition of a constant declaration",
"patternProperties": {
"^experimental_": {}
},
"properties": {
"deprecated": {
"description": "True if the element is deprecated in the target version",
"type": "boolean"
},
"location": {
"$ref": "#/definitions/location",
"description": "Source location of the declaration"
},
"maybe_attributes": {
"$ref": "#/definitions/attributes-list",
"description": "Optional list of attributes of the constant declaration"
},
"name": {
"$ref": "#/definitions/compound-identifier",
"description": "Fully qualified name of the constant"
},
"type": {
"$ref": "#/definitions/type",
"description": "Type of the constant"
},
"value": {
"$ref": "#/definitions/constant",
"description": "Value of the constant"
}
},
"required": [
"deprecated",
"location",
"name",
"type",
"value"
],
"type": "object"
},
"constant": {
"description": "Definition of a constant value",
"oneOf": [
{
"$ref": "#/definitions/identifier-constant",
"description": "Selection of a constant value (using an identifier)"
},
{
"$ref": "#/definitions/literal-constant",
"description": "Selection of a constant value (using a literal)"
},
{
"$ref": "#/definitions/binary-operator-constant",
"description": "Selection of a constant value (using a binary operator)"
}
]
},
"count": {
"description": "Definition of count",
"maximum": 4294967295,
"minimum": 0,
"type": "integer"
},
"declarations-map": {
"additionalProperties": false,
"description": "Definition of declarations of a library",
"patternProperties": {
".*": {
"enum": [
"alias",
"bits",
"const",
"enum",
"experimental_resource",
"new_type",
"overlay",
"protocol",
"service",
"struct",
"table",
"union"
],
"type": "string"
}
},
"type": "object"
},
"enum": {
"additionalProperties": false,
"description": "Definition of an enum declaration",
"patternProperties": {
"^experimental_": {}
},
"properties": {
"deprecated": {
"description": "True if the element is deprecated in the target version",
"type": "boolean"
},
"location": {
"$ref": "#/definitions/location",
"description": "Source location of the declaration"
},
"maybe_attributes": {
"$ref": "#/definitions/attributes-list",
"description": "Optional list of attributes of the enum declaration"
},
"maybe_unknown_value": {
"description": "Unknown member value (present for flexible enums only)",
"type": "integer"
},
"members": {
"description": "List of enum members",
"items": {
"$ref": "#/definitions/enum-member"
},
"type": "array"
},
"name": {
"$ref": "#/definitions/compound-identifier",
"description": "Fully qualified name of the enum"
},
"naming_context": {
"$ref": "#/definitions/naming-context",
"description": "Naming context of the table"
},
"strict": {
"description": "Strictness of the enum",
"type": "boolean"
},
"type": {
"$ref": "#/definitions/integer-type",
"description": "Type of the enum"
}
},
"required": [
"deprecated",
"location",
"members",
"name",
"strict",
"type"
],
"type": "object"
},
"enum-member": {
"additionalProperties": false,
"description": "Definition of an enum member",
"patternProperties": {
"^experimental_": {}
},
"properties": {
"deprecated": {
"description": "True if the element is deprecated in the target version",
"type": "boolean"
},
"location": {
"$ref": "#/definitions/location",
"description": "Source location of the declaration"
},
"maybe_attributes": {
"$ref": "#/definitions/attributes-list",
"description": "Optional list of attributes of the enum member"
},
"name": {
"$ref": "#/definitions/identifier",
"description": "Name of the enum member"
},
"value": {
"$ref": "#/definitions/constant",
"description": "Value of the enum member"
}
},
"required": [
"deprecated",
"location",
"name",
"value"
],
"type": "object"
},
"experimental-pointer-type": {
"additionalProperties": false,
"description": "Definition of an experimental pointer type",
"patternProperties": {
"^experimental_": {}
},
"properties": {
"kind": {
"description": "Selection of base type as experimental pointer type",
"enum": [
"experimental_pointer"
],
"type": "string"
},
"pointee_type": {
"$ref": "#/definitions/type",
"description": "Type of what is being pointed to"
},
"type_shape_v2": {
"$ref": "#/definitions/typeshape",
"description": "Type shape of this declaration"
}
},
"required": [
"kind",
"pointee_type",
"type_shape_v2"
],
"type": "object"
},
"external-declarations-map": {
"additionalProperties": false,
"description": "Definition of declarations of an external library",
"patternProperties": {
".*": {
"oneOf": [
{
"additionalProperties": false,
"patternProperties": {
"^experimental_": {}
},
"properties": {
"kind": {
"enum": [
"struct",
"table",
"union"
],
"type": "string"
},
"resource": {
"type": "boolean"
}
},
"required": [
"kind",
"resource"
],
"type": "object"
},
{
"additionalProperties": false,
"patternProperties": {
"^experimental_": {}
},
"properties": {
"kind": {
"enum": [
"alias",
"bits",
"const",
"enum",
"experimental_resource",
"new_type",
"protocol",
"service"
],
"type": "string"
}
},
"required": [
"kind"
],
"type": "object"
}
]
}
},
"type": "object"
},
"fieldshape": {
"additionalProperties": false,
"description": "Definition of a field shape",
"patternProperties": {
"^experimental_": {}
},
"properties": {
"offset": {
"$ref": "#/definitions/count",
"description": "Offset in bytes at which a member starts"
},
"padding": {
"$ref": "#/definitions/count",
"description": "Padding in bytes which follows a member"
}
},
"required": [
"offset",
"padding"
],
"type": "object"
},
"handle-subtype": {
"description": "Definition of handle sub-type",
"enum": [
"handle",
"bti",
"channel",
"clock",
"debuglog",
"event",
"eventpair",
"exception",
"fifo",
"guest",
"interrupt",
"iob",
"iommu",
"job",
"msi",
"pager",
"pcidevice",
"pmt",
"port",
"process",
"profile",
"resource",
"socket",
"stream",
"suspendtoken",
"thread",
"timer",
"vcpu",
"vmar",
"vmo"
],
"type": "string"
},
"handle-type": {
"additionalProperties": false,
"description": "Definition of a handle type",
"patternProperties": {
"^experimental_": {}
},
"properties": {
"kind": {
"description": "Selection of base type as handle type",
"enum": [
"handle"
],
"type": "string"
},
"nullable": {
"description": "Flag indicating nullability of handle type",
"type": "boolean"
},
"obj_type": {
"description": "Numeric representation of handle sub-type",
"type": "integer"
},
"rights": {
"description": "Rights that must be present on a handle",
"type": "integer"
},
"subtype": {
"$ref": "#/definitions/handle-subtype",
"description": "Sub-type of handle type"
},
"resource_identifier": {
"description": "Qualified name of handle's resource type",
"type": "string"
},
"type_shape_v2": {
"$ref": "#/definitions/typeshape",
"description": "Type shape of this declaration"
}
},
"required": [
"kind",
"nullable",
"obj_type",
"rights",
"subtype",
"type_shape_v2"
],
"type": "object"
},
"identifier": {
"description": "Definition of identifier",
"pattern": "^[A-Za-z]([_A-Za-z0-9]*[A-Za-z0-9])?$",
"type": "string"
},
"identifier-constant": {
"additionalProperties": false,
"description": "Definition of a constant value (using an identifier)",
"patternProperties": {
"^experimental_": {}
},
"properties": {
"expression": {
"description": "Expression used in source code to define the constant",
"type": "string"
},
"identifier": {
"$ref": "#/definitions/compound-identifier",
"description": "Identifier used as constant value"
},
"kind": {
"description": "Selection of constant value using an identifier",
"enum": [
"identifier"
],
"type": "string"
},
"value": {
"description": "Evaluated value of the constant",
"type": "string"
}
},
"required": [
"kind",
"identifier",
"value",
"expression"
],
"type": "object"
},
"identifier-type": {
"additionalProperties": false,
"description": "Definition of an identifier type",
"patternProperties": {
"^experimental_": {}
},
"properties": {
"identifier": {
"$ref": "#/definitions/compound-identifier",
"description": "Identifier type name"
},
"kind": {
"description": "Selection of base type as identifier type",
"enum": [
"identifier"
],
"type": "string"
},
"nullable": {
"description": "Flag indicating nullability of identifier type",
"type": "boolean"
},
"protocol_transport": {
"description": "Transport used by the request protocol",
"type": "string"
},
"type_shape_v2": {
"$ref": "#/definitions/typeshape",
"description": "Type shape of this declaration"
}
},
"required": [
"kind",
"identifier",
"nullable",
"type_shape_v2"
],
"type": "object"
},
"integer-type": {
"description": "Definition of integer primitive sub-type",
"enum": [
"int8",
"int16",
"int32",
"int64",
"uint8",
"uint16",
"uint32",
"uint64",
"uchar",
"usize64",
"uintptr64"
],
"type": "string"
},
"protocol": {
"additionalProperties": false,
"description": "Definition of a protocol declaration",
"patternProperties": {
"^experimental_": {}
},
"properties": {
"composed_protocols": {
"description": "List of composed protocols",
"items": {
"$ref": "#/definitions/compose"
},
"type": "array"
},
"deprecated": {
"description": "True if the element is deprecated in the target version",
"type": "boolean"
},
"location": {
"$ref": "#/definitions/location",
"description": "Source location of the declaration"
},
"maybe_attributes": {
"$ref": "#/definitions/attributes-list",
"description": "Optional list of attributes of the protocol declaration"
},
"methods": {
"description": "List of methods and events",
"items": {
"$ref": "#/definitions/protocol-method"
},
"type": "array"
},
"name": {
"$ref": "#/definitions/compound-identifier",
"description": "Name of the protocol"
},
"openness": {
"description": "Which kinds of unknown interactions the protocol supports",
"enum": [
"open",
"ajar",
"closed"
],
"type": "string"
}
},
"required": [
"deprecated",
"location",
"methods",
"name"
],
"type": "object"
},
"protocol-method": {
"additionalProperties": false,
"description": "Definition of a method or event",
"patternProperties": {
"^experimental_": {}
},
"properties": {
"deprecated": {
"description": "True if the element is deprecated in the target version",
"type": "boolean"
},
"has_request": {
"description": "Flag indicating that protocol method has a request component. If has_request is true, the method is client-initiated. It may or may not have a payload, which is provided separately in `maybe_request_payload`. For example, `Foo()` is a method where has_request would be true but `maybe_request_payload` would be absent.",
"type": "boolean"
},
"has_response": {
"description": "Flag indicating that protocol method has a response component. If has_response is true, the method is either a two-way method or a server initiated event, depending on whether it `has_request`. It may or may not have a payload, which is provided separately in `maybe_response_payload`. For example `Foo() -> ()` and `-> Bar()` are methods where `has_response` would be true but `maybe_response_payload` would be absent.",
"type": "boolean"
},
"is_composed": {
"description": "Flag indicating whether method was composed into this protocol",
"type": "boolean"
},
"has_error": {
"description": "Flag indicating whether method uses the error syntax. If true, `maybe_response_payload` will be a result union, and the response will be further broken down in `maybe_response_success_type` and `maybe_response_err_type`.",
"type": "boolean"
},
"location": {
"$ref": "#/definitions/location",
"description": "Source location of the declaration"
},
"maybe_attributes": {
"$ref": "#/definitions/attributes-list",
"description": "Optional list of attributes of the method or event"
},
"maybe_request_payload": {
"$ref": "#/definitions/identifier-type",
"description": "Optional request type"
},
"maybe_response_payload": {
"$ref": "#/definitions/identifier-type",
"description": "Optional response type. This is the wire form of the response, so if error syntax is used, this is the result union."
},
"maybe_response_success_type": {
"$ref": "#/definitions/type",
"description": "Type of the success variant of the result union (only present if `has_error` is true or `strict` is false)"
},
"maybe_response_err_type": {
"$ref": "#/definitions/type",
"description": "Type of the error variant of the result union (only present if `has_error` is true)"
},
"name": {
"$ref": "#/definitions/identifier",
"description": "Name of the protocol method"
},
"ordinal": {
"$ref": "#/definitions/ordinal",
"description": "Ordinal number of the protocol method"
},
"strict": {
"description": "Flag indicating that the method does not support unknown interactions. If false (i.e. the method is flexible), `maybe_response_payload` will be a result union, and the response will be further broken down in `maybe_response_success_type`.",
"type": "boolean"
}
},
"required": [
"deprecated",
"has_request",
"has_response",
"is_composed",
"has_error",
"location",
"name",
"ordinal"
],
"type": "object"
},
"protocol-method-parameter": {
"additionalProperties": false,
"description": "Definition of parameter or return of a method or event",
"patternProperties": {
"^experimental_": {}
},
"properties": {
"field_shape_v2": {
"$ref": "#/definitions/fieldshape",
"description": "Field shape"
},
"location": {
"$ref": "#/definitions/location",
"description": "Source location of the declaration"
},
"maybe_attributes": {
"$ref": "#/definitions/attributes-list",
"description": "Optional list of attributes of the method or event parameter"
},
"name": {
"$ref": "#/definitions/identifier",
"description": "Name of the parameter or return"
},
"type": {
"$ref": "#/definitions/type",
"description": "Type of the parameter or return"
}
},
"required": [
"field_shape_v2",
"location",
"name",
"type"
],
"type": "object"
},
"internal-subtype": {
"description": "Definition of internal sub-type",
"enum": [
"framework_error"
],
"type": "string"
},
"internal-type": {
"additionalProperties": false,
"description": "Definition of internal type",
"patternProperties": {
"^experimental_": {}
},
"properties": {
"kind": {
"description": "Selection of type as internal type",
"enum": [
"internal"
],
"type": "string"
},
"subtype": {
"$ref": "#/definitions/internal-subtype",
"description": "Sub-type of the internal type"
},
"type_shape_v2": {
"$ref": "#/definitions/typeshape",
"description": "Type shape of this declaration"
}
},
"required": [
"kind",
"subtype",
"type_shape_v2"
],
"type": "object"
},
"library": {
"additionalProperties": false,
"description": "Definition of library",
"patternProperties": {
"^experimental_": {}
},
"properties": {
"declarations": {
"$ref": "#/definitions/external-declarations-map",
"description": "Declarations of library"
},
"name": {
"$ref": "#/definitions/library-identifier",
"description": "Name of library"
}
},
"required": [
"name",
"declarations"
],
"type": "object"
},
"library-identifier": {
"description": "Definition of library identifier",
"pattern": "^[a-z][a-z0-9]*(\\.[a-z][a-z0-9]*)*$",
"type": "string"
},
"platform-identifier": {
"description": "Definition of platform identifier",
"pattern": "^[a-z][a-z0-9]*$",
"type": "string"
},
"version-identifier": {
"description": "Definition of a version identifier",
"pattern": "^([1-9][0-9]*|HEAD|LEGACY)$",
"type": "string"
},
"literal-constant": {
"additionalProperties": false,
"description": "Definition of a constant value (using a literal)",
"patternProperties": {
"^experimental_": {}
},
"properties": {
"expression": {
"description": "Expression used in source code to define the constant",
"type": "string"
},
"kind": {
"description": "Selection of constant value using a literal",
"enum": [
"literal"
],
"type": "string"
},
"literal": {
"$ref": "#/definitions/literal-value",
"description": "Literal used as constant value"
},
"value": {
"description": "Evaluated value of the constant",
"type": "string"
}
},
"required": [
"kind",
"literal",
"value",
"expression"
],
"type": "object"
},
"literal-value": {
"additionalProperties": false,
"description": "Definition of a literal constant value",
"patternProperties": {
"^experimental_": {}
},
"properties": {
"expression": {
"description": "Original in source constant value, may be a const expression.",
"type": "string"
},
"kind": {
"description": "Selection of string literal type",
"enum": [
"string",
"numeric",
"bool"
],
"type": "string"
},
"value": {
"description": "Resolved constant value",
"type": "string"
}
},
"required": [
"kind",
"value",
"expression"
],
"type": "object"
},
"location": {
"additionalProperties": false,
"patternProperties": {
"^experimental_": {}
},
"properties": {
"column": {
"description": "One-based column number, counting in bytes",
"maximum": 4294967295,
"minimum": 1,
"type": "integer"
},
"filename": {
"description": "Path to the file",
"type": "string"
},
"length": {
"description": "Length of the location, counting in bytes",
"maximum": 4294967295,
"minimum": 0,
"type": "integer"
},
"line": {
"description": "One-based line number in the file",
"maximum": 4294967295,
"minimum": 1,
"type": "integer"
}
},
"required": [
"filename",
"line",
"column",
"length"
],
"type": "object"
},
"naming-context": {
"description": "A naming context is a list of names, from least specific to most specific, which identifies the use of a layout. For example, in `type Outer = struct { inner struct {}; };`, the context for the innermost struct is [\"Outer\", \"inner\"]. Naming contexts are only specified for anonymous layouts.",
"items": {
"type": "string"
},
"type": "array"
},
"ordinal": {
"description": "Definition of ordinal",
"maximum": 9223372036854775807,
"minimum": 1,
"type": "integer"
},
"partial-type-ctor": {
"additionalProperties": false,
"description": "Description of a type in terms of its composition of other type arguments",
"patternProperties": {
"^experimental_": {}
},
"properties": {
"name": {
"description": "Fully qualified name of the type",
"type": "string"
},
"args": {
"description": "Type's list of defining arguments",
"items": {
"$ref": "#/definitions/partial-type-ctor"
},
"type": "array"
},
"nullable": {
"description": "Flag indicating nullability of the type",
"type": "boolean"
},
"maybe_size": {
"$ref": "#/definitions/constant",
"description": "Optional number of maximum elements"
},
"handle_rights": {
"$ref": "#/definitions/constant",
"description": "Optional handle rights"
},
"maybe_handle_subtype": {
"$ref": "#/definitions/handle-subtype",
"description": "Optional handle subtype"
}
},
"required": [
"name",
"args",
"nullable"
],
"type": "object"
},
"primitive-subtype": {
"description": "Definition of primitive sub-type",
"oneOf": [
{
"description": "Selection of non-integer primitive sub-type",
"enum": [
"bool",
"float32",
"float64"
],
"type": "string"
},
{
"$ref": "#/definitions/integer-type",
"description": "Selection of integer primitive sub-type"
}
]
},
"primitive-type": {
"additionalProperties": false,
"description": "Definition of primitive type",
"patternProperties": {
"^experimental_": {}
},
"properties": {
"kind": {
"description": "Selection of base type as primitive type",
"enum": [
"primitive"
],
"type": "string"
},
"subtype": {
"$ref": "#/definitions/primitive-subtype",
"description": "Sub-type of the primitive type"
},
"type_shape_v2": {
"$ref": "#/definitions/typeshape",
"description": "Type shape of this declaration"
}
},
"required": [
"kind",
"subtype",
"type_shape_v2"
],
"type": "object"
},
"request-type": {
"additionalProperties": false,
"description": "Definition of a request type",
"patternProperties": {
"^experimental_": {}
},
"properties": {
"kind": {
"description": "Selection of base type as request type",
"enum": [
"request"
],
"type": "string"
},
"nullable": {
"description": "Flag indicating nullability of request type",
"type": "boolean"
},
"subtype": {
"$ref": "#/definitions/compound-identifier",
"description": "Protocol name of request type"
},
"protocol_transport": {
"description": "Transport used by the request protocol",
"type": "string"
},
"type_shape_v2": {
"$ref": "#/definitions/typeshape",
"description": "Type shape of this declaration"
}
},
"required": [
"kind",
"subtype",
"nullable",
"protocol_transport",
"type_shape_v2"
],
"type": "object"
},
"resource": {
"additionalProperties": false,
"description": "Definition of a resource declaration",
"patternProperties": {
"^experimental_": {}
},
"properties": {
"deprecated": {
"description": "True if the element is deprecated in the target version",
"type": "boolean"
},
"location": {
"$ref": "#/definitions/location",
"description": "Source location of the declaration"
},
"maybe_attributes": {
"$ref": "#/definitions/attributes-list",
"description": "Optional list of attributes of the resource declaration"
},
"name": {
"$ref": "#/definitions/compound-identifier",
"description": "Fully qualified name of the resource"
},
"properties": {
"description": "List of properties",
"items": {
"$ref": "#/definitions/resource-property"
},
"type": "array"
},
"type": {
"$ref": "#/definitions/type",
"description": "Type of the resource"
}
},
"required": [
"deprecated",
"location",
"name",
"type"
],
"type": "object"
},
"resource-property": {
"additionalProperties": false,
"description": "Definition of a resource property",
"patternProperties": {
"^experimental_": {}
},
"properties": {
"deprecated": {
"description": "True if the element is deprecated in the target version",
"type": "boolean"
},
"location": {
"$ref": "#/definitions/location",
"description": "Source location of the declaration"
},
"name": {
"$ref": "#/definitions/identifier",
"description": "Name of the property"
},
"type": {
"$ref": "#/definitions/type",
"description": "Type of the resource property"
}
},
"required": [
"deprecated",
"location",
"name",
"type"
],
"type": "object"
},
"service": {
"additionalProperties": false,
"description": "Definition of a service declaration",
"patternProperties": {
"^experimental_": {}
},
"properties": {
"deprecated": {
"description": "True if the element is deprecated in the target version",
"type": "boolean"
},
"location": {
"$ref": "#/definitions/location",
"description": "Source location of the declaration"
},
"maybe_attributes": {
"$ref": "#/definitions/attributes-list",
"description": "Optional list of attributes of the service declaration"
},
"members": {
"description": "List of service members",
"items": {
"$ref": "#/definitions/service-member"
},
"type": "array"
},
"name": {
"$ref": "#/definitions/compound-identifier",
"description": "Name of service"
}
},
"required": [
"deprecated",
"location",
"members",
"name"
],
"type": "object"
},
"service-member": {
"additionalProperties": false,
"description": "Definition of a service member",
"patternProperties": {
"^experimental_": {}
},
"properties": {
"deprecated": {
"description": "True if the element is deprecated in the target version",
"type": "boolean"
},
"location": {
"$ref": "#/definitions/location",
"description": "Source location of the declaration"
},
"maybe_attributes": {
"$ref": "#/definitions/attributes-list",
"description": "Optional list of service member attributes"
},
"name": {
"$ref": "#/definitions/identifier",
"description": "Name of the service member"
},
"type": {
"$ref": "#/definitions/type",
"description": "Type of the service member"
}
},
"required": [
"deprecated",
"location",
"name",
"type"
],
"type": "object"
},
"string-type": {
"additionalProperties": false,
"description": "Definition of string type",
"patternProperties": {
"^experimental_": {}
},
"properties": {
"kind": {
"description": "Selection of base type as string type",
"enum": [
"string"
],
"type": "string"
},
"maybe_element_count": {
"$ref": "#/definitions/count",
"description": "Optional size of string, in bytes"
},
"nullable": {
"description": "Flag indicating nullability of string type",
"type": "boolean"
},
"type_shape_v2": {
"$ref": "#/definitions/typeshape",
"description": "Type shape of this declaration"
}
},
"required": [
"kind",
"nullable",
"type_shape_v2"
],
"type": "object"
},
"struct": {
"additionalProperties": false,
"description": "Definition of a struct declaration",
"patternProperties": {
"^experimental_": {}
},
"properties": {
"deprecated": {
"description": "True if the element is deprecated in the target version",
"type": "boolean"
},
"is_empty_success_struct": {
"description": "True if this is an empty success struct generated by the compiler, i.e. the `maybe_response_success_type` for a method like `strict Foo() -> () error uint32` or `flexible Foo() -> ()`",
"type": "boolean"
},
"location": {
"$ref": "#/definitions/location",
"description": "Source location of the declaration"
},
"max_handles": {
"$ref": "#/definitions/count",
"description": "Maximum number of handles present in the struct"
},
"maybe_attributes": {
"$ref": "#/definitions/attributes-list",
"description": "Optional list of attributes of the struct declaration"
},
"members": {
"description": "List of struct members",
"items": {
"$ref": "#/definitions/struct-member"
},
"type": "array"
},
"name": {
"$ref": "#/definitions/compound-identifier",
"description": "Name of struct"
},
"naming_context": {
"$ref": "#/definitions/naming-context",
"description": "Naming context of the struct"
},
"resource": {
"description": "True if the struct is a resource type (declared to contain handles)",
"type": "boolean"
},
"type_shape_v2": {
"$ref": "#/definitions/typeshape",
"description": "Type shape of this declaration"
}
},
"required": [
"deprecated",
"is_empty_success_struct",
"location",
"members",
"name",
"resource",
"type_shape_v2"
],
"type": "object"
},
"struct-member": {
"additionalProperties": false,
"description": "Definition of a struct member",
"patternProperties": {
"^experimental_": {}
},
"properties": {
"deprecated": {
"description": "True if the element is deprecated in the target version",
"type": "boolean"
},
"field_shape_v2": {
"$ref": "#/definitions/fieldshape",
"description": "Field shape"
},
"location": {
"$ref": "#/definitions/location",
"description": "Source location of the declaration"
},
"maybe_attributes": {
"$ref": "#/definitions/attributes-list",
"description": "Optional list of struct member attributes"
},
"maybe_default_value": {
"$ref": "#/definitions/constant",
"description": "Optional default value for struct member"
},
"name": {
"$ref": "#/definitions/identifier",
"description": "Name of struct member"
},
"type": {
"$ref": "#/definitions/type",
"description": "Type of the struct member"
}
},
"required": [
"deprecated",
"field_shape_v2",
"location",
"name",
"type"
],
"type": "object"
},
"table": {
"additionalProperties": false,
"description": "Definition of a table",
"patternProperties": {
"^experimental_": {}
},
"properties": {
"deprecated": {
"description": "True if the element is deprecated in the target version",
"type": "boolean"
},
"location": {
"$ref": "#/definitions/location",
"description": "Source location of the declaration"
},
"max_handles": {
"$ref": "#/definitions/count",
"description": "Maximum number of handles present in the table"
},
"maybe_attributes": {
"$ref": "#/definitions/attributes-list",
"description": "Optional list of table attributes"
},
"members": {
"description": "List of table members, sorted by ordinal",
"items": {
"$ref": "#/definitions/table-member"
},
"type": "array"
},
"name": {
"$ref": "#/definitions/compound-identifier",
"description": "Name of table"
},
"naming_context": {
"$ref": "#/definitions/naming-context",
"description": "Naming context of the table"
},
"resource": {
"description": "True if the table is a resource type (may contain handles)",
"type": "boolean"
},
"strict": {
"description": "Strictness of table",
"type": "boolean"
},
"type_shape_v2": {
"$ref": "#/definitions/typeshape",
"description": "Type shape of this declaration"
}
},
"required": [
"deprecated",
"location",
"members",
"name",
"resource",
"strict",
"type_shape_v2"
],
"type": "object"
},
"table-member": {
"additionalProperties": false,
"description": "Definition of a table member",
"patternProperties": {
"^experimental_": {}
},
"properties": {
"deprecated": {
"description": "True if the element is deprecated in the target version",
"type": "boolean"
},
"location": {
"$ref": "#/definitions/location",
"description": "Source location of the declaration"
},
"maybe_attributes": {
"$ref": "#/definitions/attributes-list",
"description": "Optional list of table member attributes"
},
"name": {
"$ref": "#/definitions/identifier",
"description": "Name of table member"
},
"ordinal": {
"$ref": "#/definitions/ordinal",
"description": "Ordinal value of table member"
},
"type": {
"$ref": "#/definitions/type",
"description": "Type of table member"
}
},
"required": [
"deprecated",
"location",
"ordinal",
"type"
],
"type": "object"
},
"type": {
"description": "Definition of type",
"oneOf": [
{
"$ref": "#/definitions/array-type",
"description": "Selection of array type"
},
{
"$ref": "#/definitions/string-array-type",
"description": "Selection of array type"
},
{
"$ref": "#/definitions/vector-type",
"description": "Selection of vector type"
},
{
"$ref": "#/definitions/string-type",
"description": "Selection of string type"
},
{
"$ref": "#/definitions/handle-type",
"description": "Selection of handle type"
},
{
"$ref": "#/definitions/request-type",
"description": "Selection of request type"
},
{
"$ref": "#/definitions/primitive-type",
"description": "Selection of primitive type"
},
{
"$ref": "#/definitions/identifier-type",
"description": "Selection of identifier type"
},
{
"$ref": "#/definitions/internal-type",
"description": "Selection of internal type"
},
{
"$ref": "#/definitions/experimental-pointer-type",
"description": "Selection of an experimental pointer type"
}
]
},
"alias": {
"additionalProperties": false,
"description": "Definition of an alias",
"patternProperties": {
"^experimental_": {}
},
"properties": {
"deprecated": {
"description": "True if the element is deprecated in the target version",
"type": "boolean"
},
"experimental_maybe_from_alias": {
"$ref": "#/definitions/partial-type-ctor",
"description": "If provided, an alias for the corresponding type used in the definition"
},
"location": {
"$ref": "#/definitions/location",
"description": "Source location of the declaration"
},
"maybe_attributes": {
"$ref": "#/definitions/attributes-list",
"description": "Optional list of alias attributes"
},
"name": {
"$ref": "#/definitions/compound-identifier",
"description": "Name of an alias"
},
"partial_type_ctor": {
"$ref": "#/definitions/partial-type-ctor",
"description": "(Deprecated) Type constructor being aliased, possibly partial"
},
"type": {
"$ref": "#/definitions/type",
"description": "The type that the alias refers to"
}
},
"required": [
"deprecated",
"location",
"name",
"partial_type_ctor",
"type"
],
"type": "object"
},
"new-type": {
"additionalProperties": false,
"description": "Definition of a new-type",
"patternProperties": {
"^experimental_": {}
},
"properties": {
"deprecated": {
"description": "True if the element is deprecated in the target version",
"type": "boolean"
},
"experimental_maybe_from_alias": {
"$ref": "#/definitions/partial-type-ctor",
"description": "If provided, an alias for the corresponding type used in the definition"
},
"location": {
"$ref": "#/definitions/location",
"description": "Source location of the declaration"
},
"maybe_attributes": {
"$ref": "#/definitions/attributes-list",
"description": "Optional list of new-type alias attributes"
},
"name": {
"$ref": "#/definitions/compound-identifier",
"description": "Name of a new-type"
},
"type": {
"$ref": "#/definitions/type",
"description": "Type corresponding to the new-type"
}
},
"required": [
"deprecated",
"location",
"name",
"type"
],
"type": "object"
},
"typeshape": {
"additionalProperties": false,
"description": "Definition of a type shape",
"patternProperties": {
"^experimental_": {}
},
"properties": {
"alignment": {
"$ref": "#/definitions/count",
"description": "Alignment of this declaration"
},
"depth": {
"$ref": "#/definitions/count",
"description": "Maximum depth of this declaration"
},
"has_flexible_envelope": {
"description": "Flag indicating if this declaration contains flexible envelopes (in unions or tables)",
"type": "boolean"
},
"has_padding": {
"description": "Flag indicating if there could be padding bytes in this declaration",
"type": "boolean"
},
"inline_size": {
"$ref": "#/definitions/count",
"description": "Size of bytes in the inline portion of this declaration"
},
"max_handles": {
"$ref": "#/definitions/count",
"description": "Maximum number of handles this declaration can hold"
},
"max_out_of_line": {
"$ref": "#/definitions/count",
"description": "Maximum number of bytes in the out-of-line portion of this declaration"
}
},
"required": [
"inline_size",
"alignment",
"depth",
"max_handles",
"max_out_of_line",
"has_padding",
"has_flexible_envelope"
],
"type": "object"
},
"union": {
"additionalProperties": false,
"description": "Definition of an extensible union",
"patternProperties": {
"^experimental_": {}
},
"properties": {
"deprecated": {
"description": "True if the element is deprecated in the target version",
"type": "boolean"
},
"is_result": {
"description": "True if this is a result union, i.e. the response type generated for a method that is flexible or uses error syntax",
"type": "boolean"
},
"location": {
"$ref": "#/definitions/location",
"description": "Source location of the declaration"
},
"max_handles": {
"$ref": "#/definitions/count",
"description": "Maximum number of handles present in the extensible union"
},
"maybe_attributes": {
"$ref": "#/definitions/attributes-list",
"description": "Optional list of extensible union attributes"
},
"members": {
"description": "List of extensible union members, sorted by ordinal",
"items": {
"$ref": "#/definitions/union-member"
},
"type": "array"
},
"name": {
"$ref": "#/definitions/compound-identifier",
"description": "Name of extensible union"
},
"naming_context": {
"$ref": "#/definitions/naming-context",
"description": "Naming context of the union"
},
"resource": {
"description": "True if the union is a resource type (may contain handles)",
"type": "boolean"
},
"strict": {
"description": "Strictness of extensible union",
"type": "boolean"
},
"type_shape_v2": {
"$ref": "#/definitions/typeshape",
"description": "Type shape of this declaration"
}
},
"required": [
"deprecated",
"is_result",
"location",
"members",
"name",
"resource",
"strict",
"type_shape_v2"
],
"type": "object"
},
"union-member": {
"additionalProperties": false,
"description": "Definition of an extensible union member",
"patternProperties": {
"^experimental_": {}
},
"properties": {
"deprecated": {
"description": "True if the element is deprecated in the target version",
"type": "boolean"
},
"location": {
"$ref": "#/definitions/location",
"description": "Source location of the declaration"
},
"maybe_attributes": {
"$ref": "#/definitions/attributes-list",
"description": "Optional list of extensible union member attributes"
},
"name": {
"$ref": "#/definitions/identifier",
"description": "Name of extensible union member"
},
"ordinal": {
"$ref": "#/definitions/ordinal",
"description": "Ordinal value of extensible union member"
},
"type": {
"$ref": "#/definitions/type",
"description": "Type of extensible union member"
}
},
"required": [
"deprecated",
"location",
"ordinal",
"type"
],
"type": "object"
},
"overlay": {
"additionalProperties": false,
"description": "Definition of an overlay",
"patternProperties": {
"^experimental_": {}
},
"properties": {
"deprecated": {
"description": "True if the element is deprecated in the target version",
"type": "boolean"
},
"location": {
"$ref": "#/definitions/location",
"description": "Source location of the declaration"
},
"max_handles": {
"$ref": "#/definitions/count",
"description": "Maximum number of handles present in the overlay"
},
"maybe_attributes": {
"$ref": "#/definitions/attributes-list",
"description": "Optional list of overlay attributes"
},
"members": {
"description": "List of overlay members, sorted by ordinal",
"items": {
"$ref": "#/definitions/overlay-member"
},
"type": "array"
},
"name": {
"$ref": "#/definitions/compound-identifier",
"description": "Name of overlay"
},
"naming_context": {
"$ref": "#/definitions/naming-context",
"description": "Naming context of the overlay"
},
"resource": {
"description": "True if the overlay is a resource type (may contain handles)",
"type": "boolean"
},
"strict": {
"description": "Strictness of overlay",
"type": "boolean"
},
"type_shape_v2": {
"$ref": "#/definitions/typeshape",
"description": "Type shape of this declaration"
}
},
"required": [
"deprecated",
"location",
"members",
"name",
"resource",
"strict",
"type_shape_v2"
],
"type": "object"
},
"overlay-member": {
"additionalProperties": false,
"description": "Definition of an overlay member",
"patternProperties": {
"^experimental_": {}
},
"properties": {
"deprecated": {
"description": "True if the element is deprecated in the target version",
"type": "boolean"
},
"location": {
"$ref": "#/definitions/location",
"description": "Source location of the declaration"
},
"maybe_attributes": {
"$ref": "#/definitions/attributes-list",
"description": "Optional list of overlay member attributes"
},
"name": {
"$ref": "#/definitions/identifier",
"description": "Name of overlay member"
},
"ordinal": {
"$ref": "#/definitions/ordinal",
"description": "Ordinal value of overlay member"
},
"type": {
"$ref": "#/definitions/type",
"description": "Type of overlay member"
}
},
"required": [
"deprecated",
"location",
"ordinal",
"type"
],
"type": "object"
},
"vector-type": {
"additionalProperties": false,
"description": "Definition of vector type",
"patternProperties": {
"^experimental_": {}
},
"properties": {
"element_type": {
"$ref": "#/definitions/type",
"description": "Element type of vector type"
},
"kind": {
"description": "Selection of base type as vector type",
"enum": [
"vector"
],
"type": "string"
},
"maybe_element_count": {
"$ref": "#/definitions/count",
"description": "Optional number of maximum elements in vector type"
},
"nullable": {
"description": "Flag indicating nullability of vector type",
"type": "boolean"
},
"type_shape_v2": {
"$ref": "#/definitions/typeshape",
"description": "Type shape of this declaration"
}
},
"required": [
"kind",
"element_type",
"nullable",
"type_shape_v2"
],
"type": "object"
}
},
"description": "See https://fuchsia.dev/fuchsia-src/development/languages/fidl/reference/json-ir.md",
"patternProperties": {
"^experimental_": {}
},
"properties": {
"available": {
"description": "Platforms and versions that were available when compiling the library.",
"type": "object",
"patternProperties": {
"^[a-z][a-z0-9]*$": {
"$ref": "#/definitions/version-identifier",
"description": "Version selected for this platform"
}
}
},
"bits_declarations": {
"description": "List of bits declarations, sorted by fully qualified name",
"items": {
"$ref": "#/definitions/bits"
},
"type": "array"
},
"const_declarations": {
"description": "List of constants, sorted by fully qualified name",
"items": {
"$ref": "#/definitions/const"
},
"type": "array"
},
"declaration_order": {
"description": "List of declarations in declaration order",
"items": {
"$ref": "#/definitions/compound-identifier"
},
"type": "array"
},
"declarations": {
"$ref": "#/definitions/declarations-map",
"description": "List of declarations and their types"
},
"enum_declarations": {
"description": "List of enumerations, sorted by fully qualified name",
"items": {
"$ref": "#/definitions/enum"
},
"type": "array"
},
"experiments": {
"description": "List of active experiments given to fidlc via the --experimental flag",
"items": {
"type": "string"
},
"type": "array"
},
"experimental_resource_declarations": {
"description": "List of resources, sorted by fully qualified name",
"items": {
"$ref": "#/definitions/resource"
},
"type": "array"
},
"external_struct_declarations": {
"description": "List of external structs that are used to form method payloads, sorted by fully qualified name",
"items": {
"$ref": "#/definitions/struct"
},
"type": "array"
},
"protocol_declarations": {
"description": "List of protocols, sorted by fully qualified name",
"items": {
"$ref": "#/definitions/protocol"
},
"type": "array"
},
"library_dependencies": {
"description": "List of dependencies on other libraries, sorted by library name",
"items": {
"$ref": "#/definitions/library"
},
"type": "array"
},
"maybe_attributes": {
"$ref": "#/definitions/attributes-list",
"description": "Optional list of attributes of the library"
},
"name": {
"$ref": "#/definitions/library-identifier",
"description": "Name of the library"
},
"platform": {
"$ref": "#/definitions/platform-identifier",
"description": "Platform the library is versioned under"
},
"service_declarations": {
"description": "List of services, sorted by fully qualified name",
"items": {
"$ref": "#/definitions/service"
},
"type": "array"
},
"struct_declarations": {
"description": "List of structures, sorted by fully qualified name",
"items": {
"$ref": "#/definitions/struct"
},
"type": "array"
},
"table_declarations": {
"description": "List of tables, sorted by fully qualified name",
"items": {
"$ref": "#/definitions/table"
},
"type": "array"
},
"alias_declarations": {
"description": "List of aliases, sorted by fully qualified name",
"items": {
"$ref": "#/definitions/alias"
},
"type": "array"
},
"new_type_declarations": {
"description": "List of new-types, sorted by fully qualified name",
"items": {
"$ref": "#/definitions/new-type"
},
"type": "array"
},
"union_declarations": {
"description": "List of unions, sorted by fully qualified name",
"items": {
"$ref": "#/definitions/union"
},
"type": "array"
},
"overlay_declarations": {
"description": "List of overlays, sorted by fully qualified name",
"items": {
"$ref": "#/definitions/overlay"
},
"type": [
"array",
"null"
]
}
},
"required": [
"name",
"platform",
"available",
"bits_declarations",
"const_declarations",
"enum_declarations",
"experimental_resource_declarations",
"protocol_declarations",
"service_declarations",
"struct_declarations",
"table_declarations",
"union_declarations",
"alias_declarations",
"declaration_order",
"declarations",
"library_dependencies"
],
"type": "object"
}