[−][src]Crate pigeon
A crate for reading/writing from/to byte buffers.
This crate uses big-endian for all numbers.
Usage Example
use { pigeon::{ Writer, Reader, Target, Unpack, Pack, WriteResult, ReadResult, ReadError, U3, U5, }, }; #[derive(Debug, PartialEq)] pub struct Animal { pub position: (u8, u8, u8), pub fluffy: bool, pub name: String, pub weight: f32, } impl Pack for Animal { fn pack<T: Target>(&self, writer: &mut Writer<T>) -> WriteResult<()> { writer.write((U3(self.position.0), U3(self.position.1), U3(self.position.2)))?; writer.write(self.fluffy)?; let name_bytes = self.name.as_bytes(); writer.write(U5(name_bytes.len() as u8))?; writer.write_bytes(name_bytes)?; writer.write(self.weight)?; Ok(()) } } impl<'a> Unpack<'a> for Animal { fn unpack(reader: &mut Reader<'a>) -> ReadResult<Self> { let (U3(x), U3(y), U3(z)) = reader.read()?; let position = (x, y, z); let fluffy = reader.read()?; let U5(name_len_u8) = reader.read()?; let name_len = name_len_u8 as usize; let name_bytes_unaligned = reader.read_bytes(name_len)?; let mut name_bytes = [0; 256]; name_bytes_unaligned.copy_to_slice(&mut name_bytes[0..name_len]); let name = String::from_utf8(name_bytes[0..name_len].to_vec()).map_err(|_| ReadError::UnexpectedData)?; let weight = reader.read()?; Ok(Animal { position, fluffy, name: name.to_owned(), weight, }) } } let kitty = Animal { position: (3, 2, 7), fluffy: true, name: "Joseph Joestar".to_owned(), weight: 12., }; let mut buf = [0; 128]; let mut writer = Writer::new(&mut buf[..]); writer.write(&kitty).unwrap(); let len = writer.finish().unwrap(); let mut reader = Reader::new(&buf[..len]); let kitty_: Animal = reader.read().unwrap(); assert_eq!(kitty, kitty_);
Structs
Iter | An iterator over the bytes in an |
Reader | A type that can be used to read from a buffer. |
U1 | Adapter for reading/writing a single bit. |
U2 | Adapter for reading/writing a 2-bit unsigned integer. |
U3 | Adapter for reading/writing a 3-bit unsigned integer. |
U4 | Adapter for reading/writing a 4-bit unsigned integer. |
U5 | Adapter for reading/writing a 5-bit unsigned integer. |
U6 | Adapter for reading/writing a 6-bit unsigned integer. |
U7 | Adapter for reading/writing a 7-bit unsigned integer. |
UnalignedSlice | A byte slice which is not aligned, but does contain a whole number of bytes. |
Writer | A type which can be used for writing to a type that implements |
Enums
ReadError | An error which can be emitted when a read fails. |
WriteError | An error which can be emitted when a write fails. |
Traits
Pack | Types which can get written to a |
Target | A type which can be written to by a |
Unpack | Types which can get read from a |
Functions
pack_buffer | Pack the type to a buffer directly. |
unpack_buffer | Read a type which implement |
Type Definitions
ReadResult | A type alias for a |
WriteResult | A type alias for a |