Исходный код bytespec.codecs.uuid
# Copyright (c) 2026 ink-developer
from uuid import UUID
from typing_extensions import override
from bytespec.codecs import ICodec
from bytespec.enums import ByteOrder
from .bytes import FixedBytesCodec
[документация]
class UUIDCodec(ICodec[UUID]):
"""A UUID as exactly 16 bytes from UUID.bytes, without a length prefix.
The model's byte order does not switch this representation to bytes_le.
"""
def __init__(self) -> None:
self.codec = FixedBytesCodec(length=16)
@override
def encode(self, value: UUID, byte_order: ByteOrder) -> bytes:
"""Return the 16 bytes of value.bytes regardless of byte_order."""
return self.codec.encode(value.bytes, byte_order)
@override
def decode(self, buffer: bytes, byte_order: ByteOrder, offset: int) -> tuple[UUID, int]:
"""Read a UUID and return it with the position offset + 16.
Raises:
DecodeError: There are not enough bytes for a UUID.
ValueError: Negative offset.
"""
value, offset = self.codec.decode(buffer, byte_order, offset)
return UUID(bytes=value), offset