def serialize_bytes(self, bytes, as_byte_array=not six.PY2): if as_byte_array: return (WXF_CONSTANTS.BinaryString, varint_bytes(len(bytes)), bytes) else: return self.serialize_string( force_text(bytes, encoding="iso8859-1"))
def serialize_function(self, head, args, **opts): iterable, length = get_length(args, **opts) return chain( (WXF_CONSTANTS.Function, varint_bytes(length)), head, chain.from_iterable(iterable) )
def serialize_bytes(self, bytes, as_byte_array=not six.PY2): if as_byte_array: yield WXF_CONSTANTS.BinaryString yield varint_bytes(len(bytes)) yield bytes else: for token in self.serialize_string(force_text(bytes, encoding="iso8859-1")): yield token
def serialize_mapping(self, keyvalue, **opts): #the normalizer is always sending an generator key, value iterable, length = get_length(keyvalue, **opts) return chain((WXF_CONSTANTS.Association, varint_bytes(length)), chain.from_iterable( chain((WXF_CONSTANTS.Rule, ), key, value) for key, value in iterable))
def serialize_int(self, number): try: wxf_type, int_size = integer_size(number) yield wxf_type yield integer_to_bytes(number, int_size) except ValueError: # WXFExprInteger is raising a ValueError if the integer is not in the appropriate bounds. # that check needs to be done in case, it's better to do it only once. number = b"%i" % number yield WXF_CONSTANTS.BigInteger yield varint_bytes(len(number)) yield number
def serialize_symbol(self, name): yield WXF_CONSTANTS.Symbol yield varint_bytes(len(name)) yield force_bytes(name)
def serialize_string(self, string): string = force_bytes(string) yield WXF_CONSTANTS.String yield varint_bytes(len(string)) yield string
def serialize_decimal(self, number): number = py_encode_decimal(number) yield WXF_CONSTANTS.BigReal yield varint_bytes(len(number)) yield number