{
    "additionalProperties": false,
    "definitions": {
        "event": {
            "additionalProperties": false,
            "properties": {
                "name": {
                    "description": "Event name",
                    "type": "string"
                },
                "params": {
                    "items": {
                        "$ref": "#/definitions/param"
                    },
                    "minItems": 0,
                    "type": "array",
                    "_uniqueItems": false
                }
            },
            "type": "object"
        },
        "param": {
            "additionalProperties": false,
            "properties": {
                "doc": {
                    "description": "parameter documentation",
                    "type": "string"
                },
                "name": {
                    "type": "string"
                },
                "nullable": {
                    "type": "boolean"
                },
                "since": {
                    "$ref": "#/definitions/since"
                },
                "type": {
                    "enum": [
                        "boolean",
                        "byte",
                        "int",
                        "long",
                        "UUID",
                        "enum",
                        "byteArray",
                        "longArray",
                        "String",
                        "Data",
                        "EntryList_Integer_UUID",
                        "EntryList_Integer_Long",
                        "EntryList_Integer_Integer",
                        "List_Integer",
                        "List_Long",
                        "List_UUID",
                        "Address",
                        "CacheEventData",
                        "DistributedObjectInfo",
                        "Member",
                        "QueryCacheEventData",
                        "RaftGroupId",
                        "ScheduledTaskHandler",
                        "SimpleEntryView",
                        "WanReplicationRef",
                        "Xid",
                        "CacheConfigHolder",
                        "CacheSimpleEntryListenerConfig",
                        "EventJournalConfig",
                        "EvictionConfigHolder",
                        "HotRestartConfig",
                        "ListenerConfigHolder",
                        "AttributeConfig",
                        "IndexConfig",
                        "MapStoreConfigHolder",
                        "MerkleTreeConfig",
                        "NearCacheConfigHolder",
                        "NearCachePreloaderConfig",
                        "PredicateConfigHolder",
                        "QueryCacheConfigHolder",
                        "QueueStoreConfigHolder",
                        "RingbufferStoreConfigHolder",
                        "TimedExpiryPolicyFactoryConfig",
                        "DurationConfig",
                        "ClientBwListEntry",
                        "EntryList_String_String",
                        "EntryList_String_byteArray",
                        "EntryList_Long_byteArray",
                        "EntryList_String_EntryList_Integer_Long",
                        "EntryList_UUID_Long",
                        "EntryList_Address_List_Integer",
                        "EntryList_UUID_Address",
                        "EntryList_Data_Data",
                        "EntryList_Member_List_ScheduledTaskHandler",
                        "List_Address",
                        "List_byteArray",
                        "List_CacheEventData",
                        "List_CacheSimpleEntryListenerConfig",
                        "List_Data",
                        "ListCN_Data",
                        "List_DistributedObjectInfo",
                        "List_ListenerConfigHolder",
                        "List_AttributeConfig",
                        "List_IndexConfig",
                        "List_MemberInfo",
                        "List_QueryCacheConfigHolder",
                        "List_QueryCacheEventData",
                        "List_ScheduledTaskHandler",
                        "List_String",
                        "List_Xid",
                        "List_StackTraceElement",
                        "List_ClientBwListEntry",
                        "List_MCEvent",
                        "Map_String_String",
                        "MergePolicyConfig",
                        "MemberVersion",
                        "MemberInfo",
                        "MCEvent",
                        "AnchorDataListHolder",
                        "PagingPredicateHolder"
                    ]
                }
            },
            "required": [
                "name",
                "type",
                "nullable",
                "since",
                "doc"
            ],
            "type": "object"
        },
        "since": {
            "default": 2.0,
            "enum": [
                2.0
            ]
        }
    },
    "properties": {
        "id": {
            "description": "Service unique id, 0-255",
            "maximum": 255,
            "minimum": 0,
            "type": "integer"
        },
        "methods": {
            "items": {
                "additionalProperties": false,
                "properties": {
                    "doc": {
                        "description": "method documentation",
                        "type": "string"
                    },
                    "events": {
                        "items": {
                            "$ref": "#/definitions/event"
                        },
                        "minItems": 1,
                        "type": "array",
                        "_uniqueItems": true
                    },
                    "id": {
                        "description": "Method unique id, 1-255",
                        "maximum": 255,
                        "minimum": 1,
                        "type": "integer"
                    },
                    "name": {
                        "description": "Method name",
                        "type": "string"
                    },
                    "request": {
                        "additionalProperties": false,
                        "description": "Request message definition",
                        "properties": {
                            "params": {
                                "items": {
                                    "$ref": "#/definitions/param"
                                },
                                "minItems": 0,
                                "type": "array",
                                "_uniqueItems": false
                            },
                            "partitionIdentifier": {
                                "description": "How should the partition Id calculated for this request. Used in documentation.",
                                "type": [
                                    "integer",
                                    "string"
                                ]
                            },
                            "retryable": {
                                "description": "Is the request retryable or not",
                                "type": "boolean"
                            }
                        },
                        "required": [
                            "retryable",
                            "partitionIdentifier"
                        ],
                        "type": "object"
                    },
                    "response": {
                        "additionalProperties": false,
                        "properties": {
                            "params": {
                                "items": {
                                    "$ref": "#/definitions/param"
                                },
                                "minItems": 0,
                                "type": "array",
                                "_uniqueItems": false
                            }
                        },
                        "type": "object"
                    },
                    "since": {
                        "$ref": "#/definitions/since"
                    }
                },
                "required": [
                    "name",
                    "since",
                    "doc",
                    "request",
                    "response"
                ]
            },
            "type": "array"
        },
        "name": {
            "description": "Service name",
            "type": "string"
        }
    },
    "required": [
        "name",
        "methods"
    ],
    "title": "Hazelcast Client Protocol Definition",
    "type": "object"
}