crates.io docs.rs crates.io

Varint-rs

Varint is an alternative way of storing integer numbers.

Varints allow for the storage of larger integer types in a smaller amount of space. It does this by storing an integer using the 7 lower bits and a flag in the most-significant bit. This flag is set to 1 when more bytes should be read. The groups of 7 bits are then added from the least-significant group first.

By default, this library implements the: - VarintReader trait on all types which implement std::io::Read - VarintWriter trait on all types which implement std::io::Write - Zigzag trait on all primitive signed and unsigned integer types

Example

``rust // to allow the use of theVarintWriter::write*varintfunctions use varint_rs::VarintWriter; // to allow the use of theVarintReader::read*varint` functions use varint_rs::VarintReader;

// an example to use for the buffer use std::io::Cursor;

// create an i32 set to 300 let number: i32 = 300; // create a buffer for the varint to be writen to // an i32 can be 4 bytes maximum, so we pre-allocate the capacity let mut buffer: Cursor> = Cursor::new(Vec::with_capacity(4));

// now we can write the varint into the buffer // 300 should only use 2 bytes instead of all 4 // the write_*_varint functions may return an std::io::Error buffer.writei32varint(number).unwrap();

// we reset the cursor pos back to 0, this isn't varint stuff buffer.set_position(0);

// now we can read the varint from the buffer // we should read 300 which was the number we stored // the read_*_varint functions may return an std::io::Error let number: i32 = buffer.readi32varint().unwrap(); ```

Credit

Much of this code is derived from the varint crate by Cruz Bishop. A massive thanks to them for the awesome alogrithms!