from typing import *
from trezor.protobuf import MessageType
T = TypeVar("T", bound=MessageType)


# extmod/rustmods/modtrezorproto.c
def type_for_name(name: str) -> type[T]:
    """Find the message definition for the given protobuf name."""


# extmod/rustmods/modtrezorproto.c
def type_for_wire(wire_type: int) -> type[T]:
    """Find the message definition for the given wire type (numeric
    identifier)."""


# extmod/rustmods/modtrezorproto.c
def decode(
    buffer: bytes,
    msg_type: Type[T],
    enable_experimental: bool,
) -> T:
    """Decode data in the buffer into the specified message type."""


# extmod/rustmods/modtrezorproto.c
def encoded_length(msg: MessageType) -> int:
    """Calculate length of encoding of the specified message."""


# extmod/rustmods/modtrezorproto.c
def encode(buffer: bytearray, msg: MessageType) -> int:
    """Encode the message into the specified buffer. Return length of
    encoding."""
