digu 0.0.8

a digu engine written in rust
Documentation
{
    "components": {
        "schemas": {
            "Action": {
                "oneOf": [
                    { "enum": ["InitiateDraw", "Forfeit"], "type": "string" },
                    {
                        "additionalProperties": false,
                        "properties": {
                            "FinalizeDraw": {
                                "format": "uint",
                                "minimum": 0,
                                "nullable": true,
                                "type": "integer"
                            }
                        },
                        "required": ["FinalizeDraw"],
                        "type": "object"
                    },
                    {
                        "additionalProperties": false,
                        "properties": {
                            "Swap": {
                                "format": "uint",
                                "minimum": 0,
                                "type": "integer"
                            }
                        },
                        "required": ["Swap"],
                        "type": "object"
                    }
                ]
            },
            "Game": {
                "properties": {
                    "active_player": {
                        "format": "uint8",
                        "minimum": 0,
                        "type": "integer"
                    },
                    "completed": { "type": "boolean" },
                    "deck": { "$ref": "#/components/schemas/Stack" },
                    "draw_in_progress": { "type": "boolean" },
                    "forfeitures": {
                        "items": {
                            "format": "uint8",
                            "minimum": 0,
                            "type": "integer"
                        },
                        "type": "array",
                        "uniqueItems": true
                    },
                    "hands": {
                        "additionalProperties": {
                            "items": {
                                "format": "uint8",
                                "minimum": 0,
                                "type": "integer"
                            },
                            "maxItems": 10,
                            "minItems": 10,
                            "type": "array"
                        },
                        "type": "object"
                    },
                    "n_players": {
                        "format": "uint8",
                        "minimum": 0,
                        "type": "integer"
                    },
                    "outcome": {
                        "allOf": [{ "$ref": "#/components/schemas/Outcome" }],
                        "nullable": true
                    },
                    "pile": { "$ref": "#/components/schemas/Stack" },
                    "steps": {
                        "format": "uint32",
                        "minimum": 0,
                        "type": "integer"
                    }
                },
                "required": [
                    "active_player",
                    "completed",
                    "deck",
                    "draw_in_progress",
                    "forfeitures",
                    "hands",
                    "n_players",
                    "pile",
                    "steps"
                ],
                "type": "object"
            },
            "InitRequest": {
                "properties": {
                    "n_players": {
                        "format": "uint8",
                        "minimum": 0,
                        "type": "integer"
                    }
                },
                "required": ["n_players"],
                "type": "object"
            },
            "Outcome": {
                "properties": {
                    "scores": {
                        "items": { "$ref": "#/components/schemas/Score" },
                        "type": "array"
                    },
                    "winner": {
                        "format": "uint8",
                        "minimum": 0,
                        "type": "integer"
                    }
                },
                "required": ["scores", "winner"],
                "type": "object"
            },
            "PrivateState": {
                "properties": {
                    "deck_top": {
                        "format": "uint8",
                        "minimum": 0,
                        "nullable": true,
                        "type": "integer"
                    },
                    "hand": {
                        "items": {
                            "format": "uint8",
                            "minimum": 0,
                            "type": "integer"
                        },
                        "maxItems": 10,
                        "minItems": 10,
                        "type": "array"
                    }
                },
                "required": ["hand"],
                "type": "object"
            },
            "PublicState": {
                "properties": {
                    "active_player": {
                        "format": "uint8",
                        "minimum": 0,
                        "type": "integer"
                    },
                    "completed": { "type": "boolean" },
                    "draw_in_progress": { "type": "boolean" },
                    "forfeitures": {
                        "items": {
                            "format": "uint8",
                            "minimum": 0,
                            "type": "integer"
                        },
                        "type": "array",
                        "uniqueItems": true
                    },
                    "n_players": {
                        "format": "uint8",
                        "minimum": 0,
                        "type": "integer"
                    },
                    "outcome": {
                        "allOf": [{ "$ref": "#/components/schemas/Outcome" }],
                        "nullable": true
                    },
                    "pile": {
                        "items": {
                            "format": "uint8",
                            "minimum": 0,
                            "type": "integer"
                        },
                        "type": "array"
                    },
                    "steps": {
                        "format": "uint32",
                        "minimum": 0,
                        "type": "integer"
                    }
                },
                "required": [
                    "active_player",
                    "completed",
                    "draw_in_progress",
                    "forfeitures",
                    "n_players",
                    "pile",
                    "steps"
                ],
                "type": "object"
            },
            "Response": {
                "properties": {
                    "game": { "$ref": "#/components/schemas/Game" },
                    "private_states": {
                        "items": {
                            "$ref": "#/components/schemas/PrivateState"
                        },
                        "type": "array"
                    },
                    "public_state": {
                        "$ref": "#/components/schemas/PublicState"
                    }
                },
                "required": ["game", "private_states", "public_state"],
                "type": "object"
            },
            "Score": {
                "properties": {
                    "bag": {
                        "items": {
                            "format": "uint8",
                            "minimum": 0,
                            "type": "integer"
                        },
                        "type": "array"
                    },
                    "digs": {
                        "items": {
                            "items": {
                                "format": "uint8",
                                "minimum": 0,
                                "type": "integer"
                            },
                            "type": "array"
                        },
                        "type": "array"
                    },
                    "points": { "format": "int32", "type": "integer" },
                    "winner": { "type": "boolean" }
                },
                "required": ["bag", "digs", "points", "winner"],
                "type": "object"
            },
            "Stack": {
                "properties": {
                    "cards": {
                        "items": {
                            "format": "uint8",
                            "minimum": 0,
                            "type": "integer"
                        },
                        "type": "array"
                    }
                },
                "required": ["cards"],
                "type": "object"
            },
            "StepRequest": {
                "properties": {
                    "action": { "$ref": "#/components/schemas/Action" },
                    "game": { "$ref": "#/components/schemas/Game" }
                },
                "required": ["action", "game"],
                "type": "object"
            }
        }
    },
    "info": { "title": "digu_engine", "version": "1.0.0" },
    "openapi": "3.0.3",
    "paths": {
        "/init": {
            "post": {
                "operationId": "init_game",
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/InitRequest"
                            }
                        }
                    },
                    "required": true
                },
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Response"
                                }
                            }
                        },
                        "description": "successful operation"
                    }
                }
            }
        },
        "/step": {
            "post": {
                "operationId": "step_game",
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/StepRequest"
                            }
                        }
                    },
                    "required": true
                },
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Response"
                                }
                            }
                        },
                        "description": "successful operation"
                    }
                }
            }
        }
    }
}