wire-rs
Extensible interface for converting data to/from wire protocol. Supports non-contiguous buffers (including &[IoSlice]) and is no_std compatible.
Examples
To read data from a simple slice:
use wire_rs::{WireError, WireReader};
fn read_data<'a>(slice: &'a [u8]) -> Result<(u16, i8, &'a str), WireError> {
let mut reader: WireReader = WireReader::new(slice);
let s1 = reader.read()?;
let s2 = reader.read()?;
let s3 = reader.read_ref(7)?;
Ok((s1, s2, s3))
}
To write data to a slice:
use wire_rs::{WireError, WireWriter};
fn write_data(slice: &mut [u8]) -> Result<(), WireError> {
let mut writer: WireWriter = WireWriter::new(slice);
writer.write(&10i32)?;
writer.write_part::<u64, 3>(&0xFFu64)?; writer.write("Hello, world!")?;
writer.finalize()?; Ok(())
}
To read/write data in little endian:
use wire_rs::{WireReader, WireWriter};
fn endianness() {
let default_reader: WireReader = WireReader::new(&[]);
let be_reader = WireReader::<true>::new(&[]);
let le_writer = WireWriter::<false>::new(&mut []);
}