Crates.io | bytestream |
lib.rs | bytestream |
version | 0.4.1 |
source | src |
created_at | 2020-06-16 23:21:15.641687 |
updated_at | 2021-02-03 20:23:24.902129 |
description | Provides a convenient way of writing binary data to a buffer. |
homepage | |
repository | https://github.com/patriksvensson/bytestream-rs |
max_upload_size | |
id | 254716 |
size | 23,390 |
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:
[dependencies]
bytestream = "0.4"
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);
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.
The inspiration from this crate came from the Stevenarella
Minecraft client.