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: ser_file
---
from typing import Union

from .types import *
from .util import *
from .serializer import Serializer

def serialize_STRUCT_TYPE(s, v):
    s.serialize_number(U32_BYTES, False, v.field_1)
    s.serialize_string(v.field_2)
    def lambda_v_field_3(s, v):
        s.serialize_number(U32_BYTES, False, v)
    s.serialize_array(lambda_v_field_3, v.field_3, None)
    def lambda_v_field_4(s, v):
        serialize_STRUCT_TYPE(s, v)
    s.serialize_array(lambda_v_field_4, v.field_4, None)
    s.serialize_number(U32_BYTES, False, v.field_5.start)
    s.serialize_number(U32_BYTES, False, v.field_5.stop)
    s.serialize_map(lambda s, k, v: (s.serialize_string(k), s.serialize_number(U32_BYTES, False, v)), v.field_6)
    s.serialize_map(lambda s, k, v: (s.serialize_number(U32_BYTES, False, k), s.serialize_number(U32_BYTES, False, v)), v.field_7)
    if v.field_8 is not None:
        s.serialize_number(U32_BYTES, False, 1)
        s.serialize_number(U32_BYTES, False, v.field_8)
    else:
        s.serialize_number(U32_BYTES, False, 0)
    s.serialize_bool(v.field_9)
    s.serialize_number(U32_BYTES, False, v.field_10[0])
    s.serialize_string(v.field_10[1])
    def lambda_v_field_11(s, v):
        s.serialize_string(v)
    s.serialize_array(lambda_v_field_11, v.field_11, 3)
    def lambda_v_field_12(s, v):
        s.serialize_number(U32_BYTES, False, v)
    s.serialize_array(lambda_v_field_12, v.field_12, None)
    s.serialize_number_float(U32_BYTES, v.field_13)

def serialize_UNIT_STRUCT_TYPE(s, v):
    pass

def serialize_TUPLE_STRUCT_TYPE(s, v):
    s.serialize_number(U32_BYTES, False, v[0])
    s.serialize_string(v[1])

def serialize_ENUM_TYPE(s, v):
    if isinstance(v, EnumType_AVariant):
        s.serialize_number(U32_BYTES, False, 0)
    elif isinstance(v, EnumType_BVariant):
        s.serialize_number(U32_BYTES, False, 1)
        s.serialize_number(U32_BYTES, False, v[0])
        s.serialize_string(v[1])
    elif isinstance(v, EnumType_CVariant):
        s.serialize_number(U32_BYTES, False, 2)
        s.serialize_number(U32_BYTES, False, v.field_1)
        s.serialize_string(v.field_2)
        serialize_STRUCT_TYPE(s, v.struct_type)
    else:
        raise TypeError("variant {} not exists".format(v))

def serialize_sub_module_ENUM_TYPE(s, v):
    if isinstance(v, sub_module.EnumType_AVariant):
        s.serialize_number(U32_BYTES, False, 0)
    elif isinstance(v, sub_module.EnumType_BVariant):
        s.serialize_number(U32_BYTES, False, 1)
        s.serialize_number(U32_BYTES, False, v[0])
        s.serialize_string(v[1])
    elif isinstance(v, sub_module.EnumType_CVariant):
        s.serialize_number(U32_BYTES, False, 2)
        s.serialize_number(U32_BYTES, False, v.field_1)
        s.serialize_string(v.field_2)
        serialize_STRUCT_TYPE(s, v.struct_type)
    else:
        raise TypeError("variant {} not exists".format(v))

from .runtime_checks import *
def serialize(value: Union[StructType, UnitStructType, TupleStructType, EnumType, sub_module.EnumType]) -> bytes:
    s = Serializer()

    if isinstance(value, StructType):
        assert_STRUCT_TYPE(value)
        serialize_STRUCT_TYPE(s, value)
    elif isinstance(value, UnitStructType):
        assert_UNIT_STRUCT_TYPE(value)
        serialize_UNIT_STRUCT_TYPE(s, value)
    elif isinstance(value, TupleStructType):
        assert_TUPLE_STRUCT_TYPE(value)
        serialize_TUPLE_STRUCT_TYPE(s, value)
    elif isinstance(value, EnumType):
        assert_ENUM_TYPE(value)
        serialize_ENUM_TYPE(s, value)
    elif isinstance(value, sub_module.EnumType):
        assert_sub_module_ENUM_TYPE(value)
        serialize_sub_module_ENUM_TYPE(s, value)
    else:
        raise TypeError("{} not serializable".format(type(value)))

    return s.finish()