route_clients = {
    "type": "string",
    "description": "Client-ID",
    "example": "proj-x-relay",
}

message_header = {
    "type": "object",
    "properties": {
        "message_ID": {
            "type": "string",
            "format": "uuid",
            "pattern": "[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}",
            "description": "An identifier for the type of message received.",
            "example": "b427003c-0000-11aa-a1eb-b1cdf2342fdd",
        },
        "timestamp": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp of message",
            "example": "2022-11-16T00:00:00Z",
        },
        "source": {
            "type": "string",
            "description": "The sender; Where is this message from",
            "example": "autonomy_engine",
        },
        "destination": {
            "type": "string",
            "description": "Publisher topic; What is the destination"
            + " of this message",
            "example": "ah1",
        },
        "route": {
            "type": "array",
            "items": route_clients,
            "description": "Client-IDs of adapter between forwarding the message between the source adapter and destination adapter",
        },
        "encoded": {
            "type": "boolean",
            "description": "Indicate that message raw (encoded) or decoded. "
            + "Options: encoded=true, decoded=false",
            "example": False,
        },
        "delivery_type": {
            "type": "string",
            "description": "To publish or broadcast this message.",
            "enum": ["broadcast", "publish"],
            "example": "publish",
            "default": "publish",
        },
    },
    "oneOf": [
        {
            # semver pattern https://semver.org/
            # https://regex101.com/r/Ly7O1x/3/
            # + optionally include 'v' prefix
            # escape backslashes get doubled so use char groups
            # simplify to planned variants
            "type": "object",
            "properties": {
                "version": {
                    "type": "string",
                    "pattern": "^(v{0,1}(0|[1-9][0-9]*)[.](0|[1-9][0-9]*)[.](0|[1-9][0-9]*)"
                    + "(?:-(alpha|beta)[.](0|[1-9][0-9]*))?)$",
                }
            },
            "required": ["version"],
        },
        {
            # commit ref
            "type": "object",
            "properties": {
                "version": {
                    "type": "string",
                    "pattern": "^([0-9a-f]+)$",
                }
            },
            "required": ["version"],
        },
        {
            # reserved word
            "type": "object",
            "properties": {
                "version": {
                    "type": "string",
                    "enum": ["dev", "master", "latest"],
                }
            },
            "required": ["version"],
        },
        {
            # existing float version
            "type": "object",
            "properties": {
                "version": {
                    "type": "number",
                    "format": "float",
                    "example": 2.0,
                }
            },
            "required": ["version"],
        },
    ],
    "required": [
        "message_ID",
        "timestamp",
        "source",
        "destination",
        "delivery_type",
        "encoded",
    ],
}