from typing import NamedTuple from typing import Union from typing_extensions import Self __all__ = [ "RESPONSE_TYPES", "Header", "LoginRequest", "LoginResponse", "CommandRequest", "CommandResponse", "ServerMessage", "Request", "Response", ] class Header(NamedTuple): crc32: int type: int def __bytes__(self) -> bytes: ... @classmethod def create(cls, typ: int, payload: bytes) -> Self: ... @classmethod def from_bytes(cls, payload: bytes) -> Self: ... class LoginRequest(str): def __bytes__(self) -> bytes: ... @property def payload(self) -> bytes: ... @property def header(self) -> Header: ... class LoginResponse(NamedTuple): header: Header success: bool @classmethod def from_bytes(cls, header: Header, payload: bytes) -> Self: ... class CommandRequest(NamedTuple): seq: int command: str def __bytes__(self) -> bytes: ... @property def payload(self) -> bytes: ... @property def header(self) -> Header: ... @classmethod def from_string(cls, command: str) -> Self: ... @classmethod def from_command(cls, command: str, *args: str) -> Self: ... class CommandResponse(NamedTuple): header: Header seq: int payload: bytes @classmethod def from_bytes(cls, header: Header, payload: bytes) -> Self: ... @property def message(self) -> str: ... class ServerMessage(NamedTuple): header: Header seq: int payload: bytes @classmethod def from_bytes(cls, header: Header, payload: bytes) -> Self: ... @property def message(self) -> str: ... Request = Union[LoginRequest, CommandRequest] Response = Union[LoginResponse, CommandResponse, ServerMessage] RESPONSE_TYPES = { 0x00: LoginResponse, 0x01: CommandResponse, 0x02: ServerMessage, }