[
  {
    "namespace": "arrays",
    "description": "The arrays API.",
    "types": [
      {
        "id": "EnumArrayType",
        "type": "object",
        "properties": {
          "types": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": ["one", "two", "three"]
            }
          }
        }
      },
      {
        "id": "Enumeration",
        "type": "string",
        "enum": ["one", "two", "three"]
      },
      {
        "id": "EnumArrayReference",
        "type": "object",
        "properties": {
          "types": {
            "type": "array",
            "items": {
              "$ref": "Enumeration"
            }
          }
        }
      },
      {
        "id": "EnumArrayMixed",
        "type": "object",
        "properties": {
          "inline_enums": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": ["one", "two", "three"]
            }
          },
          "infile_enums": {
            "type": "array",
            "items": {
              "$ref": "Enumeration"
            }
          },
          "external_enums": {
            "type": "array",
            "items": {
              "$ref": "enums.Enumeration"
            }
          }
        }
      },
      {
        "id": "OptionalEnumArrayType",
        "type": "object",
        "properties": {
          "types": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": ["one", "two", "three"]
            },
            "optional": true
          }
        }
      },
      {
        "id": "BasicArrayType",
        "type": "object",
        "properties": {
          "strings": {
            "type": "array",
            "items": {"type": "string"}
          },
          "booleans": {
            "type": "array",
            "items": {"type": "boolean"}
          },
          "numbers": {
            "type": "array",
            "items": {"type": "number"}
          },
          "integers": {
            "type": "array",
            "items": {"type": "integer"}
          }
        }
      },
      {
        "id": "Item",
        "type": "object",
        "properties": {
          "val": {
            "type": "integer"
          }
        }
      },
      {
        "id": "RefArrayType",
        "type": "object",
        "properties": {
          "refs": {
            "type": "array",
            "items": { "$ref": "Item" }
          }
        }
      }
    ],
    "functions": [
      {
        "name": "integerArray",
        "type": "function",
        "description": "Takes some integers.",
        "parameters": [
          {
            "name": "nums",
            "type": "array",
            "items": {"type": "integer"}
          },
          {
            "name": "callback",
            "type": "function",
            "parameters": []
          }
        ]
      },
      {
        "name": "anyArray",
        "type": "function",
        "description": "Takes some Items.",
        "parameters": [
          {
            "name": "anys",
            "type": "array",
            "items": {"type": "any"}
          },
          {
            "name": "callback",
            "type": "function",
            "parameters": []
          }
        ]
      },
      {
        "name": "objectArray",
        "type": "function",
        "description": "Takes some Items.",
        "parameters": [
          {
            "name": "objects",
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": {"type": "integer"}
            }
          },
          {
            "name": "callback",
            "type": "function",
            "parameters": []
          }
        ]
      },
      {
        "name": "refArray",
        "type": "function",
        "description": "Takes some Items.",
        "parameters": [
          {
            "name": "refs",
            "type": "array",
            "items": {"$ref": "Item"}
          },
          {
            "name": "callback",
            "type": "function",
            "parameters": []
          }
        ]
      },
      {
        "name": "justChoices",
        "type": "function",
        "description": "Takes some Choices.",
        "parameters": [
          {
            "name": "choices",
            "choices": [
              { "type": "integer" },
              { "type": "boolean" },
              { "type": "array",
                "items": {"$ref": "Item"}
              }
            ]
          },
          {
            "name": "callback",
            "type": "function",
            "parameters": []
          }
        ]
      },
      {
        "name": "choicesArray",
        "type": "function",
        "description": "Takes some Choices.",
        "parameters": [
          {
            "name": "choices",
            "type": "array",
            "items": {
              "choices": [
                { "type": "integer" },
                { "type": "boolean" },
                { "type": "array",
                  "items": {"$ref": "Item"}
                }
              ]
            }
          },
          {
            "name": "callback",
            "type": "function",
            "parameters": []
          }
        ]
      },
      {
        "name": "returnIntegerArray",
        "type": "function",
        "description": "Returns some integers.",
        "parameters": [
          {
            "name": "callback",
            "type": "function",
            "parameters": [
              {
                "name": "integers",
                "type": "array",
                "items": {"type": "integer"}
              }
            ]
          }
        ]
      },
      {
        "name": "returnRefArray",
        "type": "function",
        "description": "Returns some Items.",
        "parameters": [
          {
            "name": "callback",
            "type": "function",
            "parameters": [
              {
                "name": "refs",
                "type": "array",
                "items": {"$ref": "Item"}
              }
            ]
          }
        ]
      }
    ]
  }
]