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/javascript.rs
expression: ser_file
snapshot_kind: text
---
function serialize_STRUCT_TYPE(s, v) {
    s.serialize_number(U32_BYTES, false, v.field_1);
    s.serialize_string(v.field_2);
    const lambda_v_field_3 = (s, v) => {
        s.serialize_number(U32_BYTES, false, v)
    };
    s.serialize_array(lambda_v_field_3, v.field_3);
    const lambda_v_field_4 = (s, v) => {
        serialize_STRUCT_TYPE(s, v)
    };
    s.serialize_array(lambda_v_field_4, v.field_4);
    s.serialize_number(U32_BYTES, false, v.field_5.start);
    s.serialize_number(U32_BYTES, false, v.field_5.end);
    s.serialize_string_key_map((s, v) => s.serialize_number(U32_BYTES, false, v), v.field_6);
    s.serialize_map((d, k, v) => [
        s.serialize_number(U32_BYTES, false, k),
        s.serialize_number(U32_BYTES, false, v)
    ], v.field_7);
    if (v.field_8 !== undefined) {
        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]);
    const lambda_v_field_11 = (s, v) => {
        s.serialize_string(v)
    };
    s.serialize_array(lambda_v_field_11, v.field_11, 3);
    const lambda_v_field_12 = (s, v) => {
        s.serialize_number(U32_BYTES, false, v)
    };
    s.serialize_array(lambda_v_field_12, v.field_12);
    s.serialize_number_float(U32_BYTES, v.field_13);
}

function serialize_UNIT_STRUCT_TYPE(s, v) {}

function serialize_TUPLE_STRUCT_TYPE(s, v) {
    s.serialize_number(U32_BYTES, false, v[0]);
    s.serialize_string(v[1]);
}

function serialize_ENUM_TYPE(s, v) {
    switch (v.tag) {
    case "AVariant":
        s.serialize_number(U32_BYTES, false, 0);
        break;
    case "BVariant":
        {
            s.serialize_number(U32_BYTES, false, 1);
            s.serialize_number(U32_BYTES, false, v.value[0]);
            s.serialize_string(v.value[1]);
        }
        break;
    case "CVariant":
        {
            s.serialize_number(U32_BYTES, false, 2);
            s.serialize_number(U32_BYTES, false, v.value.field_1);
            s.serialize_string(v.value.field_2);
            serialize_STRUCT_TYPE(s, v.value.struct_type);
        }
        break;
    default:
        throw "variant not implemented"
    }
}

function serialize_sub_module_ENUM_TYPE(s, v) {
    switch (v.tag) {
    case "AVariant":
        s.serialize_number(U32_BYTES, false, 0);
        break;
    case "BVariant":
        {
            s.serialize_number(U32_BYTES, false, 1);
            s.serialize_number(U32_BYTES, false, v.value[0]);
            s.serialize_string(v.value[1]);
        }
        break;
    case "CVariant":
        {
            s.serialize_number(U32_BYTES, false, 2);
            s.serialize_number(U32_BYTES, false, v.value.field_1);
            s.serialize_string(v.value.field_2);
            serialize_STRUCT_TYPE(s, v.value.struct_type);
        }
        break;
    default:
        throw "variant not implemented"
    }
}

/**
 * Serialize a value to an array of bytes.
 * @param {string} type - The type of the value to serialize.
 * @param {Object} value - The value to serialize.
 * @return {Uint8Array} The serialized value as an array of bytes.
 */
function serialize(type, value) {
    if (!(typeof type === "string")) {
        throw new Error("type must be a string");
    }
    const s = new Serializer();
    switch (type) {
    case "StructType":
        serialize_STRUCT_TYPE(s, value);
        break;
    case "UnitStructType":
        serialize_UNIT_STRUCT_TYPE(s, value);
        break;
    case "TupleStructType":
        serialize_TUPLE_STRUCT_TYPE(s, value);
        break;
    case "EnumType":
        serialize_ENUM_TYPE(s, value);
        break;
    case "sub_module.EnumType":
        serialize_sub_module_ENUM_TYPE(s, value);
        break;
    default:
        throw "type not implemented";
    }
    return s.finish();
}

export {
    serialize
};