This module contains types and implementations that assist in the de/serialization of the crate’s primary data structures.
BitIdx<R>
The BitIdx
implementation serializes both the index value and also the bit-width of T::Mem
, so that the deserializer can ensure that it only loads from a matching data buffer.
Array<T, N>
Serde only provides implementations for [T; 0 ..= 32]
, because it must support much older Rust versions (at time of writing, 1.15+) that do not have const-generics. As bitvec
has an MSRV of 1.56; it does have const-generics. This type reïmplements Serde’s array behavior for all arrays, so that bitvec
can transport any BitArray
rather than only small bit-arrays.
Domain<Const, T, O>
BitSlice
serializes its data buffer by using Domain
to produce a sequence of elements. While the length is always known, and is additionally carried in the crate metadata ahead of the data buffer, Domain
uses Serde’s sequence model in order to allow the major implementations to use the provided slice or vector deserializers, rather than rebuilding even more logic from scratch.