Source code for stellar_sdk.xdr.base

from xdrlib3 import Packer, Unpacker

__all__ = [
    "Integer",
    "UnsignedInteger",
    "Float",
    "Double",
    "Hyper",
    "UnsignedHyper",
    "Boolean",
    "String",
    "Opaque",
]


[docs] class Integer: def __init__(self, value: int) -> None: self.value = value def pack(self, packer: Packer) -> None: packer.pack_int(self.value) @staticmethod def unpack(unpacker: Unpacker) -> int: return unpacker.unpack_int() def __hash__(self): return hash(self.value) def __eq__(self, other: object) -> bool: if not isinstance(other, self.__class__): return NotImplemented return self.value == other.value def __str__(self): return f"<Integer [value={self.value}]>"
[docs] class UnsignedInteger: def __init__(self, value: int) -> None: self.value = value def pack(self, packer: Packer) -> None: packer.pack_uint(self.value) @staticmethod def unpack(unpacker: Unpacker) -> int: return unpacker.unpack_uint() def __hash__(self): return hash(self.value) def __eq__(self, other: object) -> bool: if not isinstance(other, self.__class__): return NotImplemented return self.value == other.value def __str__(self): return f"<UnsignedInteger [value={self.value}]>"
[docs] class Float: def __init__(self, value: float) -> None: self.value = value def pack(self, packer: Packer) -> None: packer.pack_float(self.value) @staticmethod def unpack(unpacker: Unpacker) -> float: return unpacker.unpack_float() def __hash__(self): return hash(self.value) def __eq__(self, other: object) -> bool: if not isinstance(other, self.__class__): return NotImplemented return self.value == other.value def __str__(self): return f"<Float [value={self.value}]>"
[docs] class Double: def __init__(self, value: float) -> None: self.value = value def pack(self, packer: Packer) -> None: packer.pack_double(self.value) @staticmethod def unpack(unpacker: Unpacker) -> float: return unpacker.unpack_double() def __hash__(self): return hash(self.value) def __eq__(self, other: object) -> bool: if not isinstance(other, self.__class__): return NotImplemented return self.value == other.value def __str__(self): return f"<Double [value={self.value}]>"
[docs] class Hyper: def __init__(self, value: int) -> None: self.value = value def pack(self, packer: Packer) -> None: packer.pack_hyper(self.value) @staticmethod def unpack(unpacker: Unpacker) -> int: return unpacker.unpack_hyper() def __hash__(self): return hash(self.value) def __eq__(self, other: object) -> bool: if not isinstance(other, self.__class__): return NotImplemented return self.value == other.value def __str__(self): return f"<Hyper [value={self.value}]>"
[docs] class UnsignedHyper: def __init__(self, value: int) -> None: self.value = value def pack(self, packer: Packer) -> None: packer.pack_uhyper(self.value) @staticmethod def unpack(unpacker: Unpacker) -> int: return unpacker.unpack_uhyper() def __hash__(self): return hash(self.value) def __eq__(self, other: object) -> bool: if not isinstance(other, self.__class__): return NotImplemented return self.value == other.value def __str__(self): return f"<UnsignedHyper [value={self.value}]>"
[docs] class Boolean: def __init__(self, value: bool) -> None: self.value = value def pack(self, packer: Packer) -> None: packer.pack_bool(self.value) @staticmethod def unpack(unpacker: Unpacker) -> bool: return unpacker.unpack_bool() def __hash__(self): return hash(self.value) def __eq__(self, other: object) -> bool: if not isinstance(other, self.__class__): return NotImplemented return self.value == other.value def __str__(self): return f"<Boolean [value={self.value}]>"
[docs] class String: def __init__(self, value: bytes, size: int) -> None: if len(value) > size: raise ValueError( f"The maximum length of `value` should be {size}, but got {len(value)}." ) self.value = value self.size = len(value) def pack(self, packer: Packer) -> None: packer.pack_uint(len(self.value)) packer.pack_fopaque(len(self.value), self.value) @staticmethod def unpack(unpacker: Unpacker) -> bytes: size = unpacker.unpack_uint() return unpacker.unpack_fopaque(size) def __hash__(self): return hash((self.value, self.size)) def __eq__(self, other: object) -> bool: if not isinstance(other, self.__class__): return NotImplemented return self.value == other.value and self.size == other.size def __str__(self): return f"<String [value={self.value}, size={self.size}]>"
[docs] class Opaque: def __init__(self, value: bytes, size: int, fixed: bool) -> None: if fixed: if len(value) != size: raise ValueError( f"The length of `value` should be {size}, but got {len(value)}." ) else: if len(value) > size: raise ValueError( f"The maximum length of `value` should be {size}, but got {len(value)}." ) self.value = value self.fixed = fixed self.size = len(value) def pack(self, packer: Packer) -> None: if not self.fixed: size = len(self.value) packer.pack_uint(size) else: size = self.size packer.pack_fopaque(size, self.value) @staticmethod def unpack(unpacker: Unpacker, size: int, fixed: bool) -> bytes: if not fixed: size = unpacker.unpack_uint() return unpacker.unpack_fopaque(size) def __hash__(self): return hash((self.value, self.size, self.fixed)) def __eq__(self, other: object) -> bool: if not isinstance(other, self.__class__): return NotImplemented return ( self.value == other.value and self.fixed == other.fixed and self.size == other.size ) def __str__(self): return f"<Opaque [value={self.value}, fixed={self.fixed}, size={self.size}]>"