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 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 https://open-source.org.cn/licenses/MIT)
任选其一。
贡献
除非您明确声明,否则根据 Apache-2.0 许可证定义的,您有意提交以包含在作品中的任何贡献,都将按上述方式双重许可,不附加任何额外条款或条件。
依赖项
~260–500KB
~11K SLoC