| # De/Serialization Assistants |
| |
| 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. |