{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$id": "http://asyncapi.com/bindings/ros2/0.1.0/operation.json",
  "description": "This object contains information about the operation representation in ROS 2.",
  "examples": [
    {
      "node": "/turtlesim",
        "qosPolicies": {
          "deadline": "-1",
          "durability": "volatile",
          "history": "unknown",
          "leaseDuration": "-1",
          "lifespan": "-1",
          "liveliness": "automatic",
          "reliability": "reliable"
        },
        "role": "subscriber"
      }
  ],
  "type": "object",
  "required": [ "role", "node" ],
  "properties": {
    "bindingVersion": {
      "description": "The version of this binding. If omitted, 'latest' MUST be assumed.",
      "type": "string",
      "enum": [ "0.1.0" ]
    },
    "node": {
      "description": "The name of the ROS 2 node that implements this operation.",
      "type": "string"
    },
    "qosPolicies": {
      "type": "object",
      "properties": {
        "deadline": {
          "description": "The expected maximum amount of time between subsequent messages being published to a topic. -1 means infinite.",
          "type": "integer"
        },
        "durability": {
          "description": "Persistence specification that determines message availability for late-joining subscribers",
          "type": "string",
          "enum": [ "transient_local", "volatile" ]
        },
        "history": {
          "description": "Policy parameter that defines the maximum number of samples maintained in the middleware queue",
          "type": "string",
          "enum": [ "keep_last", "keep_all", "unknown" ]
        },
        "leaseDuration": {
          "description": "The maximum period of time a publisher has to indicate that it is alive before the system considers it to have lost liveliness. -1 means infinite.",
          "type": "integer"
        },
        "lifespan": {
          "description": "The maximum amount of time between the publishing and the reception of a message without the message being considered stale or expired. -1 means infinite.",
          "type": "integer"
        },
        "liveliness": {
          "description": "Defines the mechanism by which the system monitors and determines the operational status of communication entities within the network.",
          "type": "string",
          "enum": [ "automatic", "manual" ]
        },
        "reliability": {
          "description": "Specifies the communication guarantee model that determines whether message delivery confirmation between publisher and subscriber is required.",
          "type": "string",
          "enum": [ "best_effort", "realiable" ]
        }
      }
    },
    "role": {
      "description": "Specifies the ROS 2 type of the node for this operation.",
      "type": "string",
      "enum": [
        "publisher",
        "action_client",
        "service_client",
        "subscriber",
        "action_server",
        "service_server"
      ]
    }
  },
  "patternProperties": {
    "^x-[\\w\\d\\.\\x2d_]+$": {
      "$ref": "http://asyncapi.com/definitions/3.1.0/specificationExtension.json"
    }
  },
  "additionalProperties": false
}
