from google.protobuf.message import Message

TAG_TYPE_BITS: int
TAG_TYPE_MASK: int
WIRETYPE_VARINT: int
WIRETYPE_FIXED64: int
WIRETYPE_LENGTH_DELIMITED: int
WIRETYPE_START_GROUP: int
WIRETYPE_END_GROUP: int
WIRETYPE_FIXED32: int
INT32_MAX: int
INT32_MIN: int
UINT32_MAX: int
INT64_MAX: int
INT64_MIN: int
UINT64_MAX: int
FORMAT_UINT32_LITTLE_ENDIAN: str
FORMAT_UINT64_LITTLE_ENDIAN: str
FORMAT_FLOAT_LITTLE_ENDIAN: str
FORMAT_DOUBLE_LITTLE_ENDIAN: str

def PackTag(field_number: int, wire_type: int) -> int: ...
def UnpackTag(tag: int) -> tuple[int, int]: ...
def ZigZagEncode(value: int) -> int: ...
def ZigZagDecode(value: int) -> int: ...
def Int32ByteSize(field_number: int, int32: int) -> int: ...
def Int32ByteSizeNoTag(int32: int) -> int: ...
def Int64ByteSize(field_number: int, int64: int) -> int: ...
def UInt32ByteSize(field_number: int, uint32: int) -> int: ...
def UInt64ByteSize(field_number: int, uint64: int) -> int: ...
def SInt32ByteSize(field_number: int, int32: int) -> int: ...
def SInt64ByteSize(field_number: int, int64: int) -> int: ...
def Fixed32ByteSize(field_number: int, fixed32: int) -> int: ...
def Fixed64ByteSize(field_number: int, fixed64: int) -> int: ...
def SFixed32ByteSize(field_number: int, sfixed32: int) -> int: ...
def SFixed64ByteSize(field_number: int, sfixed64: int) -> int: ...
def FloatByteSize(field_number: int, flt: float) -> int: ...
def DoubleByteSize(field_number: int, double: float) -> int: ...
def BoolByteSize(field_number: int, b: bool) -> int: ...
def EnumByteSize(field_number: int, enum: int) -> int: ...
def StringByteSize(field_number: int, string: str) -> int: ...
def BytesByteSize(field_number: int, b: bytes) -> int: ...
def GroupByteSize(field_number: int, message: Message) -> int: ...
def MessageByteSize(field_number: int, message: Message) -> int: ...
def MessageSetItemByteSize(field_number: int, msg: Message) -> int: ...
def TagByteSize(field_number: int) -> int: ...

NON_PACKABLE_TYPES: tuple[int, ...]

def IsTypePackable(field_type: int) -> bool: ...
