{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$id": "https://www.schemastore.org/aio-wasm-graph-config-1.1.0.json",
  "title": "Azure IoT Operations Wasm Graph Config",
  "type": "object",
  "required": ["connections", "metadata", "moduleRequirements", "operations"],
  "properties": {
    "connections": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/WasmGraphConfigConnection"
      }
    },
    "metadata": {
      "$ref": "#/definitions/WasmGraphMetadata"
    },
    "moduleConfigurations": {
      "default": [],
      "type": "array",
      "items": {
        "$ref": "#/definitions/ModuleConfiguration"
      }
    },
    "moduleRequirements": {
      "$ref": "#/definitions/ModuleVersions"
    },
    "operations": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/WasmGraphConfigModule"
      }
    },
    "schemas": {
      "default": [],
      "type": "array",
      "items": {
        "$ref": "#/definitions/SchemaConfiguration"
      }
    }
  },
  "additionalProperties": false,
  "definitions": {
    "Arity": {
      "oneOf": [
        {
          "type": "integer",
          "format": "uint32",
          "minimum": 1
        },
        {
          "const": "unbounded"
        }
      ],
      "default": 1
    },
    "BranchOutputArm": {
      "type": "string",
      "enum": ["False", "True"]
    },
    "ConfigParameters": {
      "type": "object",
      "required": ["name"],
      "properties": {
        "default": {
          "type": ["string", "null"]
        },
        "description": {
          "type": ["string", "null"]
        },
        "name": {
          "type": "string"
        },
        "required": {
          "default": false,
          "type": "boolean"
        },
        "schema": {
          "type": ["string", "null"]
        }
      }
    },
    "ModuleConfiguration": {
      "type": "object",
      "required": ["name", "parameters"],
      "properties": {
        "name": {
          "type": "string"
        },
        "parameters": {
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/ConfigParameters"
          }
        }
      }
    },
    "ModuleVersionFeature": {
      "type": "object",
      "required": ["name"],
      "properties": {
        "name": {
          "type": "string"
        },
        "value": {
          "type": ["string", "null"]
        }
      },
      "additionalProperties": false
    },
    "ModuleVersions": {
      "type": "object",
      "required": ["apiVersion", "runtimeVersion"],
      "properties": {
        "apiVersion": {
          "type": "string"
        },
        "features": {
          "type": ["array", "null"],
          "items": {
            "$ref": "#/definitions/ModuleVersionFeature"
          }
        },
        "runtimeVersion": {
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "SchemaConfiguration": {
      "type": "object",
      "required": ["format", "name", "schema"],
      "properties": {
        "format": {
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "schema": {
          "type": "string"
        }
      }
    },
    "WasmGraphConfigConnection": {
      "type": "object",
      "required": ["from", "to"],
      "properties": {
        "from": {
          "$ref": "#/definitions/WasmGraphConfigConnectionFromPoint"
        },
        "to": {
          "$ref": "#/definitions/WasmGraphConfigConnectionToPoint"
        }
      },
      "additionalProperties": false
    },
    "WasmGraphConfigConnectionFromPoint": {
      "type": "object",
      "required": ["name"],
      "properties": {
        "arm": {
          "anyOf": [
            {
              "$ref": "#/definitions/BranchOutputArm"
            },
            {
              "type": "null"
            }
          ]
        },
        "name": {
          "type": "string"
        },
        "schemaName": {
          "type": ["string", "null"]
        }
      },
      "additionalProperties": false
    },
    "WasmGraphConfigConnectionOperator": {
      "type": "string",
      "enum": [
        "source",
        "map",
        "filter",
        "branch",
        "concatenate",
        "accumulate",
        "delay",
        "sink"
      ]
    },
    "WasmGraphConfigConnectionToPoint": {
      "type": "object",
      "required": ["name"],
      "properties": {
        "name": {
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "WasmGraphConfigModule": {
      "type": "object",
      "required": ["name", "operationType"],
      "properties": {
        "arity": {
          "$ref": "#/definitions/Arity"
        },
        "module": {
          "type": ["string", "null"]
        },
        "name": {
          "type": "string"
        },
        "operationType": {
          "$ref": "#/definitions/WasmGraphConfigConnectionOperator"
        }
      },
      "additionalProperties": false
    },
    "WasmGraphMetadata": {
      "type": "object",
      "required": ["$schema", "name", "version"],
      "properties": {
        "$schema": {
          "type": "string"
        },
        "description": {
          "type": ["string", "null"]
        },
        "name": {
          "type": "string"
        },
        "vendor": {
          "type": ["string", "null"]
        },
        "version": {
          "type": "string"
        }
      },
      "additionalProperties": false
    }
  }
}
