def write_header( w: Writer, length: int, header_byte: int, data_start: bytes | None = None, ) -> None: if length == 1 and data_start is not None and data_start[0] <= 0x7F: # no header when encoding one byte below 0x80 pass elif length <= 55: w.append(header_byte + length) else: encoded_length = int_to_bytes(length) w.append(header_byte + 55 + len(encoded_length)) w.extend(encoded_length)
def write_int(w: Writer, number: bytes) -> None: i = 0 while i < len(number) and number[i] == 0: i += 1 length = len(number) - i w.append(0x02) if length == 0 or number[i] >= 0x80: w.extend(encode_length(length + 1)) w.append(0x00) else: w.extend(encode_length(length)) w.extend(memoryview(number)[i:])
def write(w: Writer, field: RippleField, value: int | bytes | str | None) -> None: if value is None: return write_type(w, field) if field.type == FIELD_TYPE_INT16: assert isinstance(value, int) w.extend(value.to_bytes(2, "big")) elif field.type == FIELD_TYPE_INT32: assert isinstance(value, int) w.extend(value.to_bytes(4, "big")) elif field.type == FIELD_TYPE_AMOUNT: assert isinstance(value, int) w.extend(serialize_amount(value)) elif field.type == FIELD_TYPE_ACCOUNT: assert isinstance(value, str) write_bytes_varint(w, helpers.decode_address(value)) elif field.type == FIELD_TYPE_VL: assert isinstance(value, (bytes, bytearray)) write_bytes_varint(w, value) else: raise ValueError("Unknown field type")
def write_string(w: Writer, string: bytes) -> None: write_header(w, len(string), STRING_HEADER_BYTE, string) w.extend(string)
def write_bytes_reversed(w: Writer, b: bytes) -> int: w.extend(bytes(reversed(b))) return len(b)
def write_bytes(w: Writer, b: bytes) -> int: w.extend(b) return len(b)
def write_bytes_reversed(w: Writer, b: bytes, length: int) -> int: ensure(len(b) == length) w.extend(bytes(reversed(b))) return length
def write_bytes_fixed(w: Writer, b: bytes, length: int) -> int: ensure(len(b) == length) w.extend(b) return length
def write_bytes_unchecked(w: Writer, b: Union[bytes, memoryview]) -> int: w.extend(b) return len(b)
def write_bytes_unchecked(w: Writer, b: bytes) -> int: w.extend(b) return len(b)
def write_bytes_varint(w: Writer, value: bytes) -> None: """Serialize a variable length bytes.""" write_varint(w, len(value)) w.extend(value)