{
  "$id": "https://raw.githubusercontent.com/api-evangelist/amqp/refs/heads/main/json-structure/amqp-binding-structure.json",
  "$schema": "https://json-structure.org/meta/core/v0/#",
  "name": "AMQP Binding",
  "description": "Schema describing an AMQP 0-9-1 binding. Bindings are rules that exchanges use to route messages to queues. A binding links a queue to an exchange with a routing key and optional arguments for headers-based matching.",
  "type": "object",
  "required": [
    "source",
    "destination"
  ],
  "properties": {
    "source": {
      "type": "string",
      "description": "The name of the exchange from which messages are routed."
    },
    "destination": {
      "type": "string",
      "description": "The name of the queue or exchange to which messages are routed."
    },
    "destinationType": {
      "type": "string",
      "description": "Whether the destination is a queue or an exchange.",
      "enum": [
        "queue",
        "exchange"
      ],
      "default": "queue"
    },
    "routingKey": {
      "type": "string",
      "description": "The routing key for the binding. For topic exchanges, supports wildcards: * matches one word, # matches zero or more words.",
      "examples": [
        "orders.created",
        "orders.*",
        "orders.#",
        ""
      ]
    },
    "arguments": {
      "type": "object",
      "description": "Optional arguments for the binding. Used primarily with headers exchanges for matching on message header values.",
      "properties": {
        "x-match": {
          "type": "string",
          "description": "Matching algorithm for headers exchange bindings. 'all' requires all headers to match, 'any' requires at least one.",
          "enum": [
            "all",
            "any"
          ]
        }
      },
      "additionalProperties": true
    }
  },
  "additionalProperties": false
}