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

from collections.abc import AsyncIterable
from dataclasses import dataclass
from typing import Annotated, Literal, Protocol

from msgspec import Meta

from ..models import Cat as _models_Cat


class WatchCats:
    @dataclass(frozen=True, slots=True, kw_only=True)
    class Event:
        "A server-sent event."

        data: _models_Cat
        event: Literal["cat.updated"]
        id: str | None = None
        retry: Annotated[int, Meta(ge=0)] | None = None

    @dataclass(frozen=True, slots=True, kw_only=True)
    class Request:
        last_event_id: str | None
        security_context: object | None

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

        body: AsyncIterable[WatchCats.Event]

    @dataclass(slots=True)
    class Forbidden(Exception):
        "Access denied"

        pass

    type Response = Ok


class ExportCats:
    @dataclass(frozen=True, slots=True, kw_only=True)
    class Request:
        pass

    @dataclass(frozen=True, slots=True)
    class Ok:
        body: AsyncIterable[_models_Cat]

    type Response = Ok


class ExportCatsNdjson:
    @dataclass(frozen=True, slots=True, kw_only=True)
    class Request:
        pass

    @dataclass(frozen=True, slots=True)
    class Ok:
        body: AsyncIterable[_models_Cat]

    type Response = Ok


class ExportCatsSequence:
    @dataclass(frozen=True, slots=True, kw_only=True)
    class Request:
        pass

    @dataclass(frozen=True, slots=True)
    class Ok:
        body: AsyncIterable[_models_Cat]

    type Response = Ok


class CatsHandler(Protocol):
    async def watch_cats(self, request: WatchCats.Request) -> WatchCats.Response: ...
    async def export_cats(self, request: ExportCats.Request) -> ExportCats.Response: ...
    async def export_cats_ndjson(
        self, request: ExportCatsNdjson.Request
    ) -> ExportCatsNdjson.Response: ...
    async def export_cats_sequence(
        self, request: ExportCatsSequence.Request
    ) -> ExportCatsSequence.Response: ...
