veloren-serverbrowser-api 0.4.0

the format of the veloren serverbrowser, so it can be used by other tools
Documentation
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "Serverbrowser_v1_servers",
  "type": "object",
  "required": [
    "servers"
  ],
  "additionalProperties": false,
  "properties": {
    "servers": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/server"
      }
    }
  },
  "$defs": {
    "server": {
      "type": "object",
      "required": [
        "name",
        "address",
        "port",
        "description",
        "official",
        "auth_server"
      ],
      "additionalProperties": false,
      "properties": {
        "name": {
          "type": "string",
          "description": "Name of The Server"
        },
        "address": {
          "type": "string",
          "description": "Hostname or IP of Server"
        },
        "port": {
          "type": "number",
          "description": "Port of the Server"
        },
        "location": {
          "type": "string",
          "description": "country_code location of the server"
        },
        "description": {
          "type": "string",
          "description": "Description of the Server"
        },
        "auth_server": {
          "type": "string",
          "description": "FQDN of auth server used"
        },
        "query_port": {
          "type": "integer",
          "description": "Port used for server info queries"
        },
        "channel": {
          "type": "string",
          "description": "channel of the Server"
        },
        "official": {
          "type": "boolean",
          "description": "is the gameserver officially hosted by the veloren developers"
        },
        "extra": {
          "type": "object",
          "additionalProperties": true,
          "propertyNames": {
            "pattern": "^[a-z][a-z_]*$"
          },
          "patternProperties": {
            "^.*": { "$ref": "#/$defs/extra" }
          },
          "description": "extra fields for the server in various formats"
        }
      }
    },
    "extra": {
      "type": "object",
      "required": [
        "name",
        "content"
      ],
      "additionalProperties": false,
      "properties": {
        "name": {
          "type": "string",
          "description": "A human-readable suggested name"
        },
        "content": {
          "$ref": "#/$defs/extra-content",
          "description": "The content of the field."
        }
      }
    },
    "extra-content": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "url": {
          "type": "string",
          "description": "This field's content should be interpreted as a URL"
        },
        "text": {
          "type": "string",
          "description": "This field's content should be interpreted as human-readable plaintext"
        }
      },
      "oneOf": [
        {
          "type": "object",
          "required": ["url"]
        },
        {
          "type": "object",
          "required": ["text"]
        }
      ]
    }
  }
}