3个版本
0.1.0 | 2024年3月25日 |
---|---|
0.1.0-alpha2 | 2023年12月7日 |
770 在 数据结构 中
每月下载量 86
在 4 个crate中(2个直接) 使用
45KB
315 行
T-Bytes
T-Bytes是一个用于将类型数据写入字节数组的微型库。它主要用于no-std
、no-alloc
目标或crate,这些目标或crate考虑支持no-std
。
文档可以在这里找到。
安装
cargo add tbytes
使用
从示例开始会更容易。这里我们创建一个缓冲区并用异构值填充它。
use tbytes::errors::TBytesError;
use tbytes::{BytesWriterFor, TBytesReader, TBytesReaderFor, TBytesWriter};
fn main() -> Result<(), TBytesError> {
type Content = (i16, f32, [u8; 2], [i16; 2]);
let mut buffer = [0u8; 12];
let mut writer = TBytesWriter::from(buffer.as_mut_slice());
let into_values: Content = (-1048, 0.32, [10, 31], [-1, 240]);
writer.write(into_values.0)?;
writer.write(into_values.1)?;
writer.write_slice(into_values.2.as_slice())?;
writer.write_array(into_values.3)?;
assert!(matches!(writer.write(0u8), Err(TBytesError::OutOfBounds)));
let reader = TBytesReader::from(buffer.as_slice());
let mut from_values: Content = Content::default();
from_values.0 = reader.read()?;
from_values.1 = reader.read()?;
from_values.2 = reader.read_array()?;
from_values.3 = reader.read_array()?;
assert!(matches!(
reader.read() as Result<u8, TBytesError>,
Err(TBytesError::OutOfBounds)
));
assert_eq!(into_values, from_values);
Ok(())
}
有关高级使用方法,请参阅示例。
示例
basic
— 基本读写。cargo run --example basic
限制
我们希望尽可能简单,但简单是有代价的。
- 目前只支持
little endian
。 - 我们目前仅支持数字类型及其数组。但您可以始终实现自己的
TBytesReaderFor
/TBytesWriterFor
。或者更好的是,提交一个pull request!
许可证
这里我们简单地遵守根据Rust API指南(C-PERMISSIVE)建议的双重许可。
许可方式为以下之一
- Apache License,版本2.0(LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT许可证(LICENSE-MIT 或 http://opensource.org/licenses/MIT)
由您选择。
贡献
除非您明确声明,否则根据Apache-2.0许可证定义,您有意提交以包含在工作中的任何贡献,将按照上述方式双授权,没有任何额外条款或条件。
依赖项
~175KB