# Generated by oapi-gen. DO NOT EDIT.
from __future__ import annotations

from dataclasses import dataclass
from typing import Annotated, Protocol
from uuid import UUID

from msgspec import Meta

from ..models import Cat as _models_Cat
from ..models import CatCreate as _models_CatCreate
from ..models import HttpError as _models_HttpError


class ListCats:
    @dataclass(frozen=True, slots=True, kw_only=True)
    class Request:
        "List cats\n\nlimit: Maximum number of cats"

        limit: Annotated[int, Meta(ge=1, le=100)] | None

    @dataclass(frozen=True, slots=True)
    class Ok:
        "Cat list"

        body: list[_models_Cat]

    @dataclass(slots=True)
    class NotFound(Exception):
        "No cats found"

        body: _models_HttpError

    type Response = Ok


class CreateCat:
    @dataclass(frozen=True, slots=True, kw_only=True)
    class Request:
        "Create a cat\n\nbody: Cat to create"

        body: _models_CatCreate

    @dataclass(frozen=True, slots=True)
    class Created:
        "Cat created"

        pass

    type Response = Created


class ShowCatById:
    @dataclass(frozen=True, slots=True, kw_only=True)
    class Request:
        "Show a cat\n\ncat_id: Cat identifier"

        cat_id: UUID

    @dataclass(frozen=True, slots=True)
    class Ok:
        "Cat"

        body: _models_Cat

    @dataclass(slots=True)
    class NotFound(Exception):
        "Cat not found"

        body: _models_HttpError

    type Response = Ok


class CatsHandler(Protocol):
    async def list_cats(self, request: ListCats.Request) -> ListCats.Response:
        "List cats"
        ...

    async def create_cat(self, request: CreateCat.Request) -> CreateCat.Response:
        "Create a cat"
        ...

    async def show_cat_by_id(self, request: ShowCatById.Request) -> ShowCatById.Response:
        "Show a cat"
        ...
