#serde #hex #hexadecimal

serde-hex

使用serde进行十六进制编码/解码

1个不稳定版本

使用旧的Rust 2015

0.1.0 2019年5月30日

#1197解析器实现

Download history 10955/week @ 2023-10-17 11065/week @ 2023-10-24 11745/week @ 2023-10-31 11067/week @ 2023-11-07 9575/week @ 2023-11-14 6816/week @ 2023-11-21 8813/week @ 2023-11-28 10650/week @ 2023-12-05 7886/week @ 2023-12-12 7756/week @ 2023-12-19 4465/week @ 2023-12-26 9893/week @ 2024-01-02 11099/week @ 2024-01-09 14125/week @ 2024-01-16 14430/week @ 2024-01-23 15021/week @ 2024-01-30

56,158 每月下载量
用于 35 个crate(17直接使用)

MIT/Apache

51KB
991

serde-hex 构建状态

Rust crate,用于轻松且灵活地序列化和反序列化十六进制值。

概述

serde-hex crate围绕着SerHex trait构建,使得使用serde指定自定义的十六进制序列化和反序列化变得简单。一旦实现,SerHex trait通过其泛型类型参数进行配置(例如;用于没有前导零的十六进制值的SerHex<Compact>,或用于带前导零和0x前缀的SerHex<StrictPfx>)。多亏了Rust非常神奇的编译器,只有你配置中实际使用的序列化和反序列化功能组件才会被编译。使用SerHex最常见的方式是在你的类型上派生SerializeDeserialize trait。以下是一个使用serde_deriveserde_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许可证定义的,您有意提交的用于包含在作品中的任何贡献,应按上述方式双重授权,无需附加任何条款或条件。

依赖项

~260–500KB
~11K SLoC