Bit Serializer
Serialize data with control of every bit. Contains auxiliary methods for most basic types and varint encoding for integer types.
Usage
let mut writer = default;
// You can write bools and they use only one bit
writer.write_bool.unwrap;
// You can write values with how many bits you wish
// Write the value 3 with only 2 bits
let value: u32 = 3;
writer.write_bits.unwrap;
// You can also write write basic types
writer.write_u8.unwrap; // uses 8 bits
writer.write_u16.unwrap; // uses 16 bits
writer.write_u32.unwrap; // uses 32 bits
writer.write_u64.unwrap; // uses 64 bits
writer.write_i64.unwrap; // uses 16 bits
writer.write_i32.unwrap; // uses 32 bits
writer.write_i64.unwrap; // uses 64 bits
// But you can also use the varint encoding variation
// That tries to use the least number of bits to encode the value
writer.write_varint_u16.unwrap; // uses 8 bits
writer.write_varint_u32.unwrap; // uses 8 bits
writer.write_varint_u64.unwrap; // uses 8 bits
writer.write_varint_i16.unwrap; // uses 8 bits
writer.write_varint_i32.unwrap; // uses 8 bits
writer.write_varint_i64.unwrap; // uses 8 bits
// Bigger values will use more than one byte
// Float types
writer.write_f32.unwrap; // uses 32 bits
writer.write_f64.unwrap; // uses 64 bits
// Since the serializers impl Write/Read, we can use bincode
// Or write/read bytes directly to/from them
let bytes = vec!;
writer.write_all.unwrap;
let message = SimpleStruct ;
// Serialize using bincode passing a writer
serialize_into.unwrap;
// Consume the writer to get the buffer, so we can create the reader
let writer_bytes = writer.consume.unwrap;
let mut reader = new.unwrap;
// Now to the reading, just replace write for read, and do it in the same order :)
assert!;
assert_eq!;
assert_eq!;
assert_eq!;
assert_eq!;
assert_eq!;
assert_eq!;
assert_eq!;
assert_eq!;
assert_eq!;
assert_eq!;
assert_eq!;
assert_eq!;
assert_eq!;
assert_eq!;
assert_eq!;
assert_eq!;
let mut new_bytes = vec!;
reader.read_exact.unwrap;
assert_eq!;
let de_message: SimpleStruct = deserialize_from.unwrap;
assert_eq!;