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.
Add the following to your Cargo.toml
file:
toml
[dependencies]
bytestream = "0.4"
```rust use std::io::{Cursor, Read, Result, Write}; use bytestream::*;
pub struct Foo { bar: bool, baz: u32, }
impl StreamReader for Foo {
fn readfrom
impl StreamWriter for Foo {
fn writeto
// Create a buffer that implements the Write
trait
let mut buffer = Vec::
// 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::Read
trait
let mut cursor = Cursor::new(buffer);
let other = Foo::read_from(&mut cursor, ByteOrder::BigEndian).unwrap();
assert_eq!(foo, other); ```
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:
toml
[dependencies]
bytestream = { Version = "0.4", default-features = false }
Exluding the default feature will also remove
the byteorder
crate dependency.
The inspiration from this crate came from the [Stevenarella
] Minecraft client.