buffertk
========
Buffertk provides tooling for serializing and deserializing data.
Status
------
Maintenance track. The library is considered stable and will be put into maintenance mode if unchanged for one year.
Scope
-----
This library is about serialization and deserialization patterns that are common. It is chiefly intended to provide the
primitives used by the [prototk](https://crates.io/crates/prototk) crate.
Example
-------
To pack, implement the [Packable] trait and use [stack_pack].
```
use buffertk::{v64, stack_pack};
let x = v64::from(42);
let buf: &[u8] = &stack_pack(x).to_vec();
assert_eq!(&[42u8], buf);
```
Unpacking uses the [Unpackable] trait or the [Unpacker].
```
use buffertk::{v64, Unpacker};
let mut up = Unpacker::new(&[42u8]);
let x: v64 = up.unpack().expect("[42] is a valid varint; something's wrong");
assert_eq!(42u64, x.into());
```
Warts
-----
- Some patterns are used frequently and could be abstracted better. Given that most of this library is used with code
generation this is not a concern.
Documentation
-------------
The latest documentation is always available at [docs.rs](https://docs.rs/buffertk/latest/buffertk/).