ic_wire/serde_packed/mod.rs
1//! Explicit Serde field adapters for domain containers using [`crate::Packed`] bytes.
2//!
3//! Select with `#[serde(with = "ic_wire::serde_packed::nonzero_i64")]` or
4//! `#[serde(with = "ic_wire::serde_packed::heap_u64")]`. Encoding borrows existing
5//! storage on little-endian hosts; decoding remains owned. Wire's metadata derive
6//! recognizes these exact paths (also with a leading `::`).
7//! [`bools`] provides the same explicit selection for `Vec<bool>`, with checked
8//! byte-buffer decoding and `boolean[]` browser values on every endian target.
9//!
10//! Adoption changes ordinary list bytes and traversal admission: `[-1]` as
11//! `Vec<NonZeroI64>` changes from `01 01` to `08 ff ff ff ff ff ff ff ff`;
12//! heap `[1]` changes from `01 01` to `08 01 00 00 00 00 00 00 00`.
13//! Bool list bytes stay identical (`02 00 01` for `[false, true]`), while their
14//! traversal admission changes to one buffer. Existing lists are never rewritten.
15//! Coordinate contract identities and consumers, regenerate clients and requalify
16//! limits. Existing ordinary lists and `Packed` bytes/acceptance are unchanged.
17//! Field adapters can charge less encoding allowance than an equivalent `Packed`
18//! wrapper because Serde passes a reference-sized adapter to the parent serializer.
19//! Neither representation guarantees canonical heap order: retain original bytes
20//! when retries or signatures depend on them.
21
22pub mod bools;
23pub mod heap_u64;
24pub mod nonzero_i64;