from __future__ import annotations

from typing import Callable, Dict, Protocol


ResponseWriter = Callable[[str], None]
AsyncHandlerWithWriter = Callable[[str, "Adapter", ResponseWriter], None]


class CommandBundle(Protocol):
    @property
    def static_commands(self) -> Dict[str, str]:
        raise NotImplementedError

    @property
    def dynamic_commands(self) -> Dict[str, AsyncHandlerWithWriter]:
        raise NotImplementedError

    @property
    def prefix_commands(self) -> Dict[str, AsyncHandlerWithWriter]:
        raise NotImplementedError
