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 ::).

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. 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§

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.