{
    "additionalProperties": false,
    "definitions": {
        "executor": {
            "additionalProperties": false,
            "properties": {
                "name": {
                    "description": "This property indicates the executor name.",
                    "title": "Executor name.",
                    "type": "string"
                },
                "path": {
                    "_comment": "Add the pattern to match with the 'path'.",
                    "description": "This property indicates the executor path relative to its URL.",
                    "title": "Executor path.",
                    "type": "string"
                },
                "port": {
                    "description": "This property indicates the port number open on this executor for the incoming connections.",
                    "maximum": 65535,
                    "minimum": 0,
                    "title": "Connection port number.",
                    "type": "number"
                },
                "protocol": {
                    "description": "This property indicates the protocol name to use for a connection with this Executor.",
                    "enum": [
                        "ws",
                        "http"
                    ],
                    "title": "Protocol name."
                },
                "url": {
                    "description": "This property indicates the executor URL to connect with it.",
                    "oneOf": [
                        {
                            "format": "hostname"
                        },
                        {
                            "format": "ipv4"
                        },
                        {
                            "format": "ipv6"
                        }
                    ],
                    "title": "Executor URL.",
                    "type": "string"
                },
                "value": {
                    "description": "This property indicates the option value.",
                    "title": "Executor value.",
                    "type": "string"
                }
            },
            "required": [
                "protocol",
                "url",
                "path",
                "port"
            ],
            "type": "object"
        },
        "language": {
            "additionalProperties": false,
            "properties": {
                "name": {
                    "description": "This property indicates the language name.",
                    "title": "Language name.",
                    "type": "string"
                },
                "solvers": {
                    "description": "This property indicates all supporting solvers for this language.",
                    "items": {
                        "$ref": "#/definitions/solver"
                    },
                    "minItems": 1,
                    "title": "Supporting solvers.",
                    "type": "array"
                },
                "syntax-highlighter": {
                    "additionalProperties": false,
                    "description": "This property indicates the syntax highlighter path corresponding to this language.",
                    "properties": {
                        "description": {
                            "description": "This property indicates the syntax-highlighter description.",
                            "title": "Syntax-Highlighter description.",
                            "type": "string"
                        },
                        "name": {
                            "description": "This property indicates the syntax-highlighter name.",
                            "title": "Syntax-Highlighter name.",
                            "type": "string"
                        },
                        "path": {
                            "description": "This property indicates the syntax-highlighter file path.",
                            "title": "Syntax-Highlighter path.",
                            "type": "string"
                        }
                    },
                    "required": [
                        "name",
                        "path"
                    ],
                    "title": "Syntax-Highlighter path.",
                    "type": "object"
                },
                "value": {
                    "description": "This property indicates the language value used in communication with other services.",
                    "title": "Language value.",
                    "type": "string"
                }
            },
            "required": [
                "name",
                "value",
                "solvers"
            ],
            "type": "object"
        },
        "solver": {
            "additionalProperties": false,
            "properties": {
                "executors": {
                    "description": "This property indicates all supporting executors for this solver.",
                    "items": {
                        "$ref": "#/definitions/executor"
                    },
                    "minItems": 1,
                    "title": "Supporting executors.",
                    "type": "array"
                },
                "name": {
                    "description": "This property indicates the solver name.",
                    "title": "Solver name.",
                    "type": "string"
                },
                "options": {
                    "description": "This property indicates the options supported by the solver.",
                    "items": {
                        "additionalProperties": false,
                        "properties": {
                            "description": {
                                "description": "This property contains the description of the option.",
                                "title": "Option description.",
                                "type": "string"
                            },
                            "name": {
                                "description": "This property indicates the option name.",
                                "title": "Option name.",
                                "type": "string"
                            },
                            "value": {
                                "description": "This property indicates the command line argument passed to the solver.",
                                "title": "Option value.",
                                "type": "string"
                            },
                            "word_argument": {
                                "description": "This property indicates if this type of argument requires the second argument or it's just a word argument (this is just a flag).",
                                "title": "Word argument.",
                                "type": "boolean"
                            }
                        },
                        "required": [
                            "name",
                            "value",
                            "word_argument",
                            "description"
                        ],
                        "type": "object"
                    },
                    "minItems": 1,
                    "title": "Solver option",
                    "type": "array"
                },
                "value": {
                    "description": "This property indicates the solver value used in communication with other services.",
                    "title": "Solver value.",
                    "type": "string"
                }
            },
            "required": [
                "name",
                "value",
                "executors",
                "options"
            ],
            "type": "object"
        }
    },
    "properties": {
        "languages": {
            "description": "This property indicates all the supported languages by the services avalable on the LoIDE Web Application.",
            "items": {
                "$ref": "#/definitions/language"
            },
            "minItems": 1,
            "title": "Supported languages.",
            "type": "array"
        }
    },
    "required": [
        "languages"
    ],
    "self": {
        "format": "jsonschema",
        "name": "services",
        "vendor": "unical",
        "version": "1-0-0"
    }
}