1个不稳定版本
使用旧的Rust 2015
0.1.0 | 2019年5月30日 |
---|
#1197 在 解析器实现
56,158 每月下载量
用于 35 个crate(17直接使用)
51KB
991 行
serde-hex
Rust crate,用于轻松且灵活地序列化和反序列化十六进制值。
概述
该serde-hex
crate围绕着SerHex
trait构建,使得使用serde指定自定义的十六进制序列化和反序列化变得简单。一旦实现,SerHex
trait通过其泛型类型参数进行配置(例如;用于没有前导零的十六进制值的SerHex<Compact>
,或用于带前导零和0x
前缀的SerHex<StrictPfx>
)。多亏了Rust非常神奇的编译器,只有你配置中实际使用的序列化和反序列化功能组件才会被编译。使用SerHex
最常见的方式是在你的类型上派生Serialize
和Deserialize
trait。以下是一个使用serde_derive
和serde_json
的简单示例。
use serde_hex::{SerHex,StrictPfx,CompactPfx};
#[derive(Debug,PartialEq,Eq,Serialize,Deserialize)]
struct Foo {
#[serde(with = "SerHex::<StrictPfx>")]
bar: [u8;4],
#[serde(with = "SerHex::<CompactPfx>")]
bin: u64
}
fn it_works() {
let foo = Foo { bar: [0,1,2,3], bin: 16 };
let ser = serde_json::to_string(&foo).unwrap();
let exp = r#"{"bar":"0x00010203","bin":"0x10"}"#;
assert_eq!(ser,exp);
}
SerHex
自动为所有无符号整数类型实现了,并且所有Strict
变体都为长度从1到64的[T;1]
到[T;64]
的数组(其中T: SerHex
当然)实现了。我们跳过了长度为0的数组和有符号整数与浮点数的默认实现,因为这些值没有特别直观的表示方法。
此crate提供了一些有用的宏,用于在常见模式上实现SerHex
。如果你需要其他宏,还提供了一些实用函数,以使实现自定义变体尽可能简单。
注意
如果你只需要通用的十六进制转换特质,请查看广泛使用的hex
crate。这个crate主要是为了定制serde
交互,如果你不需要这个,则应优先选择hex
crate的泛型特质。
许可证
许可协议为以下之一
- Apache许可证,版本2.0,(LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT许可证(LICENSE-MIT 或 http://opensource.org/licenses/MIT)
由您选择。
贡献
除非您明确声明,否则根据Apache-2.0许可证定义的,您有意提交的用于包含在作品中的任何贡献,应按上述方式双重授权,无需附加任何条款或条件。
依赖项
~260–500KB
~11K SLoC