from __future__ import annotations

from typing import Protocol, Any


class QueueBase(Protocol):
    async def sadd(self, key: str, member: str) -> None: ...
    async def smembers(self, key: str) -> list[str]: ...
    async def rpush(self, key: str, value: str) -> None: ...
    async def lrange(self, key: str, start: int, end: int) -> list[str]: ...
    async def blpop(
        self, keys: list[str], timeout: float
    ) -> tuple[str, str] | None: ...
    async def brpop(
        self, keys: list[str], timeout: float
    ) -> tuple[str, str] | None: ...
    async def get(self, key: str) -> dict[str, Any]: ...
    async def set(self, key: str, mapping: dict[str, Any]) -> None: ...
    async def hset(self, key: str, mapping: dict[str, Any]) -> None: ...
    async def hgetall(self, key: str) -> dict[str, Any]: ...
    async def hget(self, key: str, field: str) -> str | None: ...
    async def expire(self, key: str, ttl: int) -> None: ...
    async def exists(self, key: str) -> bool: ...
    async def keys(self, pattern: str) -> list[str]: ...
    async def publish(self, channel: str, message: str) -> None: ...
