Skip to main content

Module serde_packed

Module serde_packed 

Source
Expand description

Explicit Serde field adapters for domain containers using crate::Packed bytes.

Select with #[serde(with = "ic_wire::serde_packed::nonzero_i64")] or #[serde(with = "ic_wire::serde_packed::heap_u64")]. Encoding borrows existing storage on little-endian hosts; decoding remains owned. Wire’s metadata derive recognizes these exact paths (also with a leading ::). bools provides the same explicit selection for Vec<bool>, with checked byte-buffer decoding and boolean[] browser values on every endian target.

Adoption changes ordinary list bytes and traversal admission: [-1] as Vec<NonZeroI64> changes from 01 01 to 08 ff ff ff ff ff ff ff ff; heap [1] changes from 01 01 to 08 01 00 00 00 00 00 00 00. Bool list bytes stay identical (02 00 01 for [false, true]), while their traversal admission changes to one buffer. Existing lists are never rewritten. Coordinate contract identities and consumers, regenerate clients and requalify limits. Existing ordinary lists and Packed bytes/acceptance are unchanged. Field adapters can charge less encoding allowance than an equivalent Packed wrapper because Serde passes a reference-sized adapter to the parent serializer. Neither representation guarantees canonical heap order: retain original bytes when retries or signatures depend on them.

Modules§

bools
Bulk byte-buffer encoding for Vec<bool>, with boolean[] browser values.
heap_u64
Packed little-endian bytes for alloc::collections::BinaryHeap<u64>. Encoding preserves the heap’s backing order. Decoding accepts arbitrary order and duplicates, rebuilding the heap; re-encoding may therefore differ. Generated clients use BigUint64Array, without heap normalization.
nonzero_i64
Packed little-endian bytes for Vec<core::num::NonZeroI64>. Generated clients use BigInt64Array and reject zero on both encode and decode.