class SendError(Exception):
    """retryable=False -> do not retry (bad number etc.)."""

    def __init__(self, message: str, retryable: bool = True):
        super().__init__(message)
        self.retryable = retryable


class BaseAdapter:
    name = "base"

    def connection_state(self) -> str:
        """'open' when ready to send."""
        raise NotImplementedError

    def number_exists(self, phone: str) -> bool | None:
        """True/False, or None when unknown/not supported."""
        return None

    def send(self, msg) -> str | None:
        """Send db.Message, return provider message id."""
        raise NotImplementedError
