postcard-bindgen-core 0.7.1

A crate to generate bindings for the postcard binary format for other languages than Rust - Core Crate
Documentation
---
source: postcard-bindgen-core/tests/python.rs
expression: des_file
---
from typing import TypeVar, Type, cast, Tuple

from .types import *
from .util import *
from .deserializer import Deserializer

def deserialize_STRUCT_TYPE(d) -> StructType:
    return StructType(field_1 = d.deserialize_number(U32_BYTES, False), field_2 = d.deserialize_string(), field_3 = d.deserialize_array(lambda d: d.deserialize_number(U32_BYTES, False), None), field_4 = d.deserialize_array(lambda d: deserialize_STRUCT_TYPE(d), None), field_5 = range(d.deserialize_number(U32_BYTES, False), d.deserialize_number(U32_BYTES, False)), field_6 = d.deserialize_map((lambda d: (d.deserialize_string(), d.deserialize_number(U32_BYTES, False)))), field_7 = d.deserialize_map((lambda d: (d.deserialize_number(U32_BYTES, False), d.deserialize_number(U32_BYTES, False)))), field_8 = None if d.deserialize_number(U32_BYTES, False) == 0 else d.deserialize_number(U32_BYTES, False), field_9 = d.deserialize_bool(), field_10 = (d.deserialize_number(U32_BYTES, False), d.deserialize_string()), field_11 = d.deserialize_array(lambda d: d.deserialize_string(), 3), field_12 = d.deserialize_array(lambda d: d.deserialize_number(U32_BYTES, False), None), field_13 = d.deserialize_number_float(U32_BYTES))

def deserialize_UNIT_STRUCT_TYPE(d) -> UnitStructType:
    return UnitStructType()

def deserialize_TUPLE_STRUCT_TYPE(d) -> TupleStructType:
    return TupleStructType(d.deserialize_number(U32_BYTES, False), d.deserialize_string())

def deserialize_ENUM_TYPE(d) -> EnumType:
    variant_index = d.deserialize_number(U32_BYTES, False)
    if variant_index == 0:
        return EnumType_AVariant()
    elif variant_index == 1:
        return EnumType_BVariant(d.deserialize_number(U32_BYTES, False), d.deserialize_string())
    elif variant_index == 2:
        return EnumType_CVariant(field_1 = d.deserialize_number(U32_BYTES, False), field_2 = d.deserialize_string(), struct_type = deserialize_STRUCT_TYPE(d))
    else:
        raise TypeError("variant index {} not exists".format(variant_index))

def deserialize_sub_module_ENUM_TYPE(d) -> sub_module.EnumType:
    variant_index = d.deserialize_number(U32_BYTES, False)
    if variant_index == 0:
        return sub_module.EnumType_AVariant()
    elif variant_index == 1:
        return sub_module.EnumType_BVariant(d.deserialize_number(U32_BYTES, False), d.deserialize_string())
    elif variant_index == 2:
        return sub_module.EnumType_CVariant(field_1 = d.deserialize_number(U32_BYTES, False), field_2 = d.deserialize_string(), struct_type = deserialize_STRUCT_TYPE(d))
    else:
        raise TypeError("variant index {} not exists".format(variant_index))

T = TypeVar("T", StructType, UnitStructType, TupleStructType, EnumType, sub_module.EnumType)
def deserialize(obj_type: Type[T], bytes: bytes) -> Tuple[T, bytes]:
    """Deserialize a value from an array of bytes.
    
    Args:
        obj_type: The type of the value to deserialize.
        bytes: The byte array to deserialize from.
    
    Returns:
        The deserialized value and the remaining bytes.
    """
    d = Deserializer(bytes)
    result_value = None

    if obj_type is StructType:
        result_value = cast(T, deserialize_STRUCT_TYPE(d))
    elif obj_type is UnitStructType:
        result_value = cast(T, deserialize_UNIT_STRUCT_TYPE(d))
    elif obj_type is TupleStructType:
        result_value = cast(T, deserialize_TUPLE_STRUCT_TYPE(d))
    elif obj_type is EnumType:
        result_value = cast(T, deserialize_ENUM_TYPE(d))
    elif obj_type is sub_module.EnumType:
        result_value = cast(T, deserialize_sub_module_ENUM_TYPE(d))
    else:
        raise TypeError("{} not deserializable".format(obj_type))

    return (result_value, d.release_bytes())