Crate bitsparrow [] [src]

For implementations in other languages, and more detailed information on the types check out http://bitsparrow.io/.

BitSparrow in Rust

Encoding

use bitsparrow::Encoder;

let buffer = Encoder::new()
             .uint8(100)
             .string("Foo")
             .end()
             .unwrap();

assert_eq!(buffer, vec![0x64,0x03,0x46,0x6f,0x6f])

Each method on the Encoder will return a mutable borrow of the encoder. If you need to break the monad chain, store the owned encoder as a variable before writing to it, e.g.:

use bitsparrow::Encoder;

let mut encoder = Encoder::new();
encoder.uint8(100);

/*
 * Many codes here
 */

let buffer = encoder.string("Foo")
             .end()
             .unwrap();

assert_eq!(buffer, vec![0x64,0x03,0x46,0x6f,0x6f]);

To make the monad chain feasible, Encoder will internally store the last error (if any) that occures during the chain, and return in on the Result of the end method.

Decoding

use bitsparrow::Decoder;

let buffer: Vec<u8> = vec![0x64,0x03,0x46,0x6f,0x6f];
let mut decoder = Decoder::new(buffer);

assert_eq!(100u8, decoder.uint8().unwrap());
assert_eq!("Foo", decoder.string().unwrap());
assert_eq!(true, decoder.end());

Decoder consumes the buffer and allows you to retrieve the values in order they were encoded. Calling the end method is optional, it will return true if you have read the entire buffer, which can be handy if you are reading multiple messages stacked on a single buffer.

Structs

Decoder

Decoder consumes a buffer represented as Vec<u8> and exposes methods to read BitSparrow types from it in the same order they were encoded by the Encoder.

Encoder

Encoder takes in typed data and produces a binary buffer represented as Vec<u8>.

Error

Simple error type returned either by the Decoder or Encoder