blob: d61216a3ec879e09618e94f4d1ff047b9b8f52b0 [file] [log] [blame]
{
"$schema": "http://json-schema.org/draft-04/schema#",
"id": "http://thrift.apache.org/program-schema#",
"description": "Schema for Apache Thrift protocol descriptors",
"definitions": {
"type-id": {
"enum": [
"void",
"string",
"bool",
"byte",
"i16",
"i32",
"i64",
"double",
"list",
"set",
"map",
"union",
"struct",
"exception",
"binary"
]
},
"base-type": {
"title": "Base types",
"type": "object",
"properties": {
"typeId": {
"enum": [ "void", "string", "bool", "byte", "i16", "i32", "i64", "double", "binary" ]
}
},
"required": [ "typeId" ]
},
"list-type": {
"title": "List and set types",
"type": "object",
"properties": {
"typeId": { "enum": [ "list", "set" ] },
"elemTypeId": { "$ref": "#/definitions/type-id" },
"elemType": { "$ref": "#/definitions/type-spec" }
},
"required": [ "typeId", "elemTypeId", "elemType" ]
},
"map-type": {
"title": "Map type",
"type": "object",
"properties": {
"typeId": { "enum": [ "map" ] },
"keyTypeId": { "$ref": "#/definitions/type-id" },
"keyType": { "$ref": "#/definitions/type-spec" },
"valueTypeId": { "$ref": "#/definitions/type-id" },
"valueType": { "$ref": "#/definitions/type-spec" }
},
"required": [ "typeId", "keyTypeId", "valueTypeId" ]
},
"struct-spec": {
"title": "Struct and union types",
"type": "object",
"properties": {
"typeId": { "enum": [ "union", "struct" ] },
"class": { "type": "string" }
},
"required": [ "typeId", "class" ]
},
"type-spec": {
"allOf": [
{ "type": "object" },
{
"oneOf":
[
{ "$ref": "#/definitions/base-type" },
{ "$ref": "#/definitions/list-type" },
{ "$ref": "#/definitions/map-type" },
{ "$ref": "#/definitions/struct-spec" }
]
}
]
},
"name-and-doc": {
"type": "object",
"properties": {
"name": { "type": "string" },
"doc": { "type": "string" }
},
"required": [ "name" ]
},
"enum": {
"type": "object",
"allOf": [
{ "$ref": "#/definitions/name-and-doc" },
{
"required": [ "members" ],
"properties": {
"members": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": { "type": "string" },
"value": { "type": "integer" }
},
"required": [ "name", "value" ]
}
}
}
}
]
},
"typedef": {
"type": "object",
"allOf": [
{ "$ref": "#/definitions/name-and-doc" },
{
"properties": {
"typeId": { "$ref": "#/definitions/type-id" },
"type": { "$ref": "#/definitions/type-spec" }
},
"required": [ "typeId" ]
}
]
},
"constant": {
"type": "object",
"allOf": [
{ "$ref": "#/definitions/name-and-doc" },
{ "$ref": "#/definitions/type-spec" },
{
"properties": {
"value": {
"oneOf": [
{ "type": "string" },
{ "type": "number" },
{ "type": "array" },
{ "type": "object" }
]
}
},
"required": [ "value" ]
}
]
},
"field": {
"type": "object",
"allOf": [
{ "$ref": "#/definitions/name-and-doc" },
{ "$ref": "#/definitions/type-spec" },
{
"properties": {
"key": {
"type": "integer",
"minimum": 1,
"maximum": 65535
},
"required": {
"enum": [ "required", "optional", "req_out" ]
},
"default": {
"oneOf": [
{ "type": "string" },
{ "type": "number" },
{ "type": "array" },
{ "type": "object" }
]
}
},
"required": [ "key", "required" ]
}
]
},
"struct": {
"type": "object",
"allOf": [
{ "$ref": "#/definitions/name-and-doc" },
{
"properties": {
"isException": { "type": "boolean" },
"isUnion": { "type": "boolean" },
"fields": {
"type": "array",
"items": {
"$ref": "#/definitions/field"
}
}
},
"required": [ "isException", "isUnion", "fields" ]
}
]
},
"union": {
"$ref": "#/definitions/struct"
},
"exception": {
"$ref": "#/definitions/struct"
},
"function": {
"type": "object",
"allOf": [
{ "$ref": "#/definitions/name-and-doc" },
{
"oneOf": [
{
"properties": { "oneway": { "type": "boolean" } },
"required": [ "oneway" ]
},
{
"properties": { "returnType": { "$ref": "#/definitions/type-spec" } },
"required": [ "returnType" ]
}
]
},
{
"properties": {
"arguments": {
"type": "array",
"items": {
"allOf": [
{ "$ref": "#/definitions/field" },
{
"properties": { }
}
]
}
},
"exceptions": {
"type": "array",
"items": {
"$ref": "#/definitions/exception"
}
}
},
"required": [ "oneway", "arguments", "exceptions" ]
}
]
},
"service": {
"type": "object",
"allOf": [
{ "$ref": "#/definitions/name-and-doc" },
{
"properties": {
"functions": {
"type": "array",
"items": {
"$ref": "#/definitions/function"
}
}
},
"required": [ "functions" ]
}
]
}
},
"type": "object",
"required": [
"name",
"namespaces",
"includes",
"enums",
"typedefs",
"structs",
"constants",
"services"
],
"properties": {
"name": {
"type": "string"
},
"includes": {
"type": "array",
"items": {
"type": "string"
},
"uniqueItems": true
},
"enums": {
"type": "array",
"items": {
"$ref": "#/definitions/enum"
}
},
"typedefs": {
"type": "array",
"items": {
"$ref": "#/definitions/typedef"
}
},
"structs": {
"type": "array",
"items": {
"$ref": "#/definitions/struct"
}
},
"constants": {
"type": "array",
"items": {
"$ref": "#/definitions/constant"
}
},
"services": {
"type": "array",
"items": {
"$ref": "#/definitions/service"
}
}
}
}