5个版本 (3个破坏性版本)
0.3.0 | 2022年4月2日 |
---|---|
0.2.0 | 2022年2月8日 |
0.1.1 | 2022年1月28日 |
0.1.0 | 2022年1月28日 |
0.0.0 | 2021年12月28日 |
#2264 在 编码
每月25次下载
43KB
527 代码行
Bytey
Bytey提供方便且易于使用的字节存储。
文档
文档链接可在此处找到。
安装
要开始使用此crate,您只需将其添加到您的Cargo.toml
[dependencies]
bytey = "0.3.0"
用法
use bytey::ByteBuffer;
fn main() {
let mut buffer = ByteBuffer::new().unwrap();
let value1: u16 = 1234;
let value2: i32 = -2000;
let value3: usize = usize::MAX;
// Initially the buffer will have a size of 8 bytes, unless you create the buffer using the with_capacity method
// The buffer will resize itself to fit all data inside of it
buffer.write(&value1);
buffer.write(&value2);
buffer.write(&value3);
// When you write a value to the buffer, the cursor will move along
// So if we want to read the values we just put in, we have to move it back to 0
buffer.move_cursor(0);
// Read and print the values stored inside the buffer
println!("{}", buffer.read::<u16>().unwrap()); // prints "1234"
println!("{}", buffer.read::<i32>().unwrap()); // prints "-2000"
println!("{}", buffer.read::<usize>().unwrap()); // prints what the MAX is for usize on the system
}
写入ByteBuffer的任何值都必须实现ByteBufferWrite
特质。默认情况下,此特质在所有数值原语(u8, u16, i8, i16等...)上实现。
从ByteBuffer中读取类型需要该类型实现ByteBufferRead
特质,此特质也已在所有数值原语上默认实现。
如果您想看到更多这些特质的默认实现,请通过GitHub上的问题告诉我!
宏
Bytey包含两个与特质同名的derive宏ByteBufferWrite
和ByteBufferRead
,您可以在自己的结构和枚举中使用它们。
use bytey::{ByteBuffer, ByteBufferRead, ByteBufferWrite};
fn main() {
#[derive(ByteBufferRead, ByteBufferWrite, Debug, PartialEq)]
struct Test {
a: u8,
b: u16,
c: isize,
}
let mut buffer = ByteBuffer::new().unwrap();
let val = Test { a: 1, b: 2, c: 3 };
buffer.write(&val);
buffer.move_cursor(0);
assert_eq!(val, buffer.read::<Test>().unwrap());
}
请注意,结构或枚举内的所有字段都必须实现该特质,否则您将得到错误。
变更日志
-
0.3.0
- 添加了ByteBufferWrite和ByteBufferRead特质的derive宏
-
0.2.0
- 添加了功能门控的Bincode支持
- ByteBuffer添加了Clone特质
- ByteBuffer添加了truncate方法
贡献
请自由贡献,发送pull请求。对于重大更改或如果您有任何可以改进Bytey的想法,请打开问题!
请确保您在贡献时适当更新测试。
许可证
依赖关系
~1.5MB
~36K SLoC