3 个不稳定版本
0.2.2 | 2022 年 9 月 19 日 |
---|---|
0.2.1 | 2021 年 12 月 28 日 |
0.2.0 |
|
0.1.0 | 2020 年 9 月 16 日 |
1512 在 Rust 模式 中排名
每月下载 47 次
在 2 个包中使用(通过 generic-bytes-derive)
7KB
SizedBytes
SizedBytes 是一个特性,它体现了将字节数组转换为和从其转换的类型级别长度的数组。它利用了 generic-array 和 typenum 包,它们提供了类型级别数组长度的这种 模拟。
/// A trait for sized key material that can be represented within a fixed byte
/// array size, used to represent our DH key types. This trait being
/// implemented with Error = SomeError allows you to derive
/// `TryFrom<&[u8], Error = SomeError>`.
pub trait SizedBytes: Sized {
/// The typed representation of the byte length
type Len: ArrayLength<u8> + 'static;
/// Converts this sized key material to a `GenericArray` of the same
/// size. One can convert this to a `&[u8]` with `GenericArray::as_slice()`
/// but the size information is then lost from the type.
fn to_arr(&self) -> GenericArray<u8, Self::Len>;
/// How to parse such sized material from a correctly-sized byte slice.
fn from_arr(arr: &GenericArray<u8, Self::Len>) -> Result<Self, TryFromSizedBytesError>;
}
generic-bytes-derive
包提供了一个派生宏,允许您为任何满足 SizedBytes
约束的
- 元组派生一个
SizedBytes
实现, - 结构体中的所有字段都满足
SizeBytes
约束。
字段或组件按照它们在原始结构体或元组中出现的顺序进行序列化(或从其字节表示形式反序列化)。
例如
#[derive(SizedBytes)]
struct Foo <T: SizedBytes>{
f1: T,
f2: GenericArray<u8, U32>,
}
// you can now call `to_arr` and `from_arr` on any Foo
还提供了一个针对 GenericArray<u8, N>
的泛型 SizedBytes
实现。
目的
Rust 中的许多应用程序都进行大量的字节切片之间的转换,手动或使用如 bincode 或 bytes 之类的性能方法。然而,这些表示形式的组合始终是繁琐的,并且导致了可能导致错误和繁琐的长度检查。
这允许您定义一个将长度包含在类型中的字节切片转换,并组合这样的转换,从而提供了一种更安全、更自动化的方式来处理字节表示。
文档
API 可以在这里找到:这里。
安装
将以下行添加到您的 Cargo.toml
的依赖项中
generic_bytes = "0.2.1"
generic_bytes_derive = "0.2.1"
贡献者
本代码的作者是François Garillot(@huitseeker)。要了解更多关于如何为此项目做出贡献的信息,请参阅此文档。
许可证
本项目采用MIT许可证。
依赖
~245KB