1 个不稳定版本
使用旧的 Rust 2015
0.1.0 | 2022年9月13日 |
---|
#2044 在 编码
70 每月下载
在 2 crates 中使用
55KB
1K SLoC
serde-hex
Rust 包用于轻松且灵活地序列化和反序列化十六进制值。
概述
《serde-hex》包是围绕 SerHex
特性构建的,这使得使用 serde 指定自定义的十六进制序列化和反序列化变得容易。一旦实现,SerHex
特性将通过其泛型类型参数(例如;SerHex<Compact>
用于没有前导零的十六进制值,或者 SerHex<StrictPfx>
用于带有前导零和 0x
前缀的情况)进行配置。多亏了 Rust 的非常神奇编译器,只有你实际使用的序列化和反序列化功能组件会被编译。使用 SerHex
最常见的方式是为你的类型推导 Serialize
和 Deserialize
特性。以下是一个使用 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
当然)。我们跳过了长度为零的数组以及有符号整数和浮点数的默认实现,因为这些值的表示并不是特别直观。
本库提供了一些有用的宏,用于在常见模式上实现 SerHex
。如果您觉得这些宏都不符合您的需求,还提供了一些实用函数,以使实现自定义变体尽可能不痛苦。
注意
如果您只是想寻找通用的十六进制转换特性,请查看广泛使用的 hex
库。此库主要针对可定制的 serde
互操作,如果您不需要这些特性,请优先考虑 hex
库的通用特性。
许可证
许可协议为以下之一:
- Apache License,版本 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