gaia-binary 0.1.1

Binary encoding and decoding for Gaia project
Documentation
#[cfg(test)]
mod tests {
    use gaia_binary::*;
    use std::io::Cursor;

    #[test]
    fn test_fixed_endianness() {
        let mut buf = Vec::new();
        let mut writer = BinaryWriter::<_, Fixed<LittleEndian>>::new(&mut buf);
        writer.write_u32(0x12345678).unwrap();
        assert_eq!(buf, vec![0x78, 0x56, 0x34, 0x12]);

        let mut reader = BinaryReader::<_, Fixed<LittleEndian>>::new(Cursor::new(buf));
        assert_eq!(reader.read_u32().unwrap(), 0x12345678);
    }

    #[test]
    fn test_leb128_unsigned() {
        let mut buf = Vec::new();
        let mut writer = BinaryWriter::<_, Leb128>::new(&mut buf);
        writer.write_u32(127).unwrap();
        writer.write_u32(128).unwrap();
        assert_eq!(buf, vec![127, 0x80, 0x01]);

        let mut reader = BinaryReader::<_, Leb128>::new(Cursor::new(buf));
        assert_eq!(reader.read_u32().unwrap(), 127);
        assert_eq!(reader.read_u32().unwrap(), 128);
    }

    #[test]
    fn test_zigzag_leb128() {
        let mut buf = Vec::new();
        // ZigZag<Leb128> will use ZigZag mapping then LEB128 unsigned encoding
        let mut writer = BinaryWriter::<_, ZigZag<Leb128>>::new(&mut buf);

        writer.write_i32(0).unwrap(); // 0 -> 0
        writer.write_i32(-1).unwrap(); // -1 -> 1
        writer.write_i32(1).unwrap(); // 1 -> 2
        writer.write_i32(-2).unwrap(); // -2 -> 3

        assert_eq!(buf, vec![0, 1, 2, 3]);

        let mut reader = BinaryReader::<_, ZigZag<Leb128>>::new(Cursor::new(buf));
        assert_eq!(reader.read_i32().unwrap(), 0);
        assert_eq!(reader.read_i32().unwrap(), -1);
        assert_eq!(reader.read_i32().unwrap(), 1);
        assert_eq!(reader.read_i32().unwrap(), -2);
    }

    #[test]
    fn test_position_tracking() {
        let mut buf = Vec::new();
        let mut writer = BinaryWriter::<_, Leb128>::new(&mut buf);
        writer.write_u32(127).unwrap(); // 1 byte
        assert_eq!(writer.position(), 1);
        writer.write_u32(128).unwrap(); // 2 bytes
        assert_eq!(writer.position(), 3);

        let mut reader = BinaryReader::<_, Leb128>::new(Cursor::new(buf));
        reader.read_u32().unwrap();
        assert_eq!(reader.position(), 1);
        reader.read_u32().unwrap();
        assert_eq!(reader.position(), 3);
    }
}