Crate bytestream[−][src]
This crate provides a convenient way of reading and writing bytes to a buffer
that implements the standard Read
or Write
traits.
Supported std types include u8
, u16
, u32
, u64
, i8
,
i16
, i32
and i64
.
Reading and writing of these types is done using the byteorder
crate.
Installation
Add the following to your Cargo.toml
file:
[dependencies]
bytestream = "0.4"
Examples
use std::io::{Cursor, Read, Result, Write}; use bytestream::*; #[derive(Debug, PartialEq)] pub struct Foo { bar: bool, baz: u32, } impl StreamReader for Foo { fn read_from<R: Read>(buffer: &mut R, order: ByteOrder) -> Result<Self> { Ok(Self { bar: bool::read_from(buffer, order)?, baz: u32::read_from(buffer, order)?, }) } } impl StreamWriter for Foo { fn write_to<W: Write>(&self, buffer: &mut W, order: ByteOrder) -> Result<()> { self.bar.write_to(buffer, order)?; self.baz.write_to(buffer, order)?; Ok(()) } } // Create a buffer that implements the `Write` trait let mut buffer = Vec::<u8>::new(); // Write some data to the buffer let foo = Foo { bar: true, baz: 37 }; foo.write_to(&mut buffer, ByteOrder::BigEndian).unwrap(); // Read the data back from the buffer // We wrap the buffer in a Cursor::<T> that implements the `Read` trait let mut cursor = Cursor::new(buffer); let other = Foo::read_from(&mut cursor, ByteOrder::BigEndian).unwrap(); assert_eq!(foo, other);
Exclude streamable support for std types
If you do not wish to include out-of-the-box support for std types,
you can exclude the default feature in your
Cargo.toml
file:
[dependencies]
bytestream = { Version = "0.4", default-features = false }
Exluding the default feature will also remove
the byteorder
crate dependency.
Credits
The inspiration from this crate came from the Stevenarella
Minecraft client.
Enums
ByteOrder |
|
Traits
StreamReader | The |
StreamWriter | The |