{
    "$schema": "http://json-schema.org/draft-07/schema#",
    "$id": "https://www.omg.org/spec/DDS-JSON/20190601/dds-json_domainparticipants.schema.json",
    "title": "DDS-JSON: Building Block DomainParticipants",
    "description": "This schema defines the syntax to represent DDS DomainParticipants and their contained entities (i.e., Publishers, Subscribers, DataWriters, and DataReaders) in JSON.",
    "definitions": {
        "sampleStateKind": {
            "enum": [
                "READ",
                "NOT_READ"
            ],
            "type": "string"
        },
        "viewStateKind": {
            "enum": [
                "NEW",
                "NOT_NEW"
            ],
            "type": "string"
        },
        "instanceStateKind": {
            "enum": [
                "ALIVE",
                "NOT_ALIVE_DISPOSED",
                "NOT_ALIVE_NO_WRITERS"
            ],
            "type": "string"
        },
        "statusKind": {
            "enum": [
                "DATA_AVAILABLE",
                "INCONSISTENT_TOPIC",
                "OFFERED_DEADLINE_MISSED",
                "REQUESTED_DEADLINE_MISSED",
                "OFFERED_INCOMPATIBLE_QOS",
                "REQUESTED_INCOMPATIBLE_QOS",
                "SAMPLE_LOST",
                "SAMPLE_REJECTED",
                "LIVELINESS_LOST",
                "LIVELINESS_CHANGED",
                "PUBLICATION_MATCHED",
                "SUBSCRIPTION_MATCHED",
                "DATA_ON_READERS"
            ],
            "type": "string"
        },
        "statusCondition": {
            "properties": {
                "status": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/statusKind"
                    }
                }
            }
        },
        "readCondition": {
            "properties": {
                "name": {
                    "$ref": "dds-json_qos.schema.json#/definitions/elementName"
                },
                "sample_state": {
                    "$ref": "#/definitions/sampleStateKind"
                },
                "view_state": {
                    "$ref": "#/definitions/viewStateKind"
                },
                "instance_state": {
                    "$ref": "#/definitions/instanceStateKind"
                }
            },
            "required": [
                "name"
            ],
            "type": "object"
        },
        "parameterList": {
            "type": "object",
            "properties": {
                "param": {
                    "maxItems": 100,
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "minItems": 0
                }
            }
        },
        "filterKind": {
            "enum": [
                "builtin.sql",
                "builtin.stringMatch"
            ],
            "type": "string"
        },
        "filter": {
            "properties": {
                "name": {
                    "$ref": "dds-json_qos.schema.json#/definitions/elementName"
                },
                "kind": {
                    "$ref": "#/definitions/filterKind"
                },
                "parameter_list": {
                    "$ref": "#/definitions/parameterList"
                },
                "expression": {
                    "type": "string"
                }
            },
            "required": [
                "name",
                "kind"
            ],
            "type": "object"
        },
        "dataReader": {
            "properties": {
                "name": {
                    "$ref": "dds-json_qos.schema.json#/definitions/elementName"
                },
                "topic_ref": {
                    "$ref": "dds-json_qos.schema.json#/definitions/elementNameReference"
                },
                "content_filter": {
                    "$ref": "#/definitions/filter"
                },
                "status_condition": {
                    "$ref": "#/definitions/statusCondition"
                },
                "read_condition": {
                    "$ref": "#/definitions/readCondition"
                },
                "datareader_qos": {
                    "$ref": "dds-json_qos.schema.json#/definitions/datareaderQos"
                }
            },
            "required": [
                "name",
                "topic_ref"
            ],
            "type": "object"
        },
        "dataWriter": {
            "properties": {
                "name": {
                    "$ref": "dds-json_qos.schema.json#/definitions/elementName"
                },
                "topic_ref": {
                    "$ref": "dds-json_qos.schema.json#/definitions/elementNameReference"
                },
                "datawriter_qos": {
                    "$ref": "dds-json_qos.schema.json#/definitions/datawriterQos"
                }
            },
            "required": [
                "name",
                "topic_ref"
            ],
            "type": "object"
        },
        "subscriber": {
            "properties": {
                "name": {
                    "$ref": "dds-json_qos.schema.json#/definitions/elementName"
                },
                "data_readers": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/dataReader"
                    },
                    "additionalItems": false
                },
                "subscriber_qos": {
                    "$ref": "dds-json_qos.schema.json#/definitions/subscriberQos"
                }
            },
            "type": "object",
            "required": [
                "name"
            ],
            "additionalProperties": false
        },
        "publisher": {
            "properties": {
                "name": {
                    "$ref": "dds-json_qos.schema.json#/definitions/elementName"
                },
                "data_writers": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/dataWriter"
                    },
                    "additionalItems": false
                },
                "publisher_qos": {
                    "$ref": "dds-json_qos.schema.json#/definitions/publisherQos"
                }
            },
            "type": "object",
            "required": [
                "name"
            ],
            "additionalProperties": false
        },
        "domainParticipant": {
            "properties": {
                "name": {
                    "$ref": "dds-json_qos.schema.json#/definitions/elementName"
                },
                "base_name": {
                    "$ref": "dds-json_qos.schema.json#/definitions/elementNameReference"
                },
                "domain_ref": {
                    "$ref": "dds-json_qos.schema.json#/definitions/elementNameReference"
                },
                "domain_id": {
                    "type": "integer",
                    "minimum": 0
                },
                "topics": {
                    "type": "array",
                    "items": {
                        "$ref": "dds-json_domains.schema.json#/definitions/topic"
                    },
                    "additionalItems": false
                },
                "register_types": {
                    "type": "array",
                    "items": {
                        "$ref": "dds-json_domains.schema.json#/definitions/registerType"
                    },
                    "additionalItems": false
                },
                "publishers": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/publisher"
                    },
                    "additionalItems": false
                },
                "subscribers": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/subscriber"
                    },
                    "additionalItems": false
                },
                "domain_participant_qos": {
                    "$ref": "dds-json_qos.schema.json#/definitions/domainparticipantQos"
                }
            },
            "type": "object",
            "required": [
                "name"
            ],
            "additionalProperties": false
        },
        "domainParticipantLibrary": {
            "type": "object",
            "properties": {
                "name": {
                    "$ref": "dds-json_qos.schema.json#/definitions/elementName"
                },
                "domain_participants": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/domainParticipant"
                    },
                    "additionalItems": false
                }
            },
            "required": [
                "name"
            ],
            "additionalProperties": false
        }
    },
    "type": "object",
    "properties": {
        "domain_participant_library": {
            "$ref": "#/definitions/domainParticipantLibrary"
        }
    },
    "additionalProperties": false
}