#hex #serde #derive-debug #debugging

stremio-serde-hex

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

1 个不稳定版本

使用旧的 Rust 2015

0.1.0 2022年9月13日

#2044编码

Download history 73/week @ 2024-03-14 85/week @ 2024-03-21 48/week @ 2024-03-28 22/week @ 2024-04-04 46/week @ 2024-04-11 15/week @ 2024-04-18 20/week @ 2024-04-25 28/week @ 2024-05-02 43/week @ 2024-05-09 8/week @ 2024-05-16 8/week @ 2024-05-23 12/week @ 2024-05-30 15/week @ 2024-06-06 38/week @ 2024-06-13 13/week @ 2024-06-20 3/week @ 2024-06-27

70 每月下载
2 crates 中使用

MIT/Apache

55KB
1K SLoC

serde-hex 构建状态 Crates.io

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

概述

《serde-hex》包是围绕 SerHex 特性构建的,这使得使用 serde 指定自定义的十六进制序列化和反序列化变得容易。一旦实现,SerHex 特性将通过其泛型类型参数(例如;SerHex<Compact> 用于没有前导零的十六进制值,或者 SerHex<StrictPfx> 用于带有前导零和 0x 前缀的情况)进行配置。多亏了 Rust 的非常神奇编译器,只有你实际使用的序列化和反序列化功能组件会被编译。使用 SerHex 最常见的方式是为你的类型推导 SerializeDeserialize 特性。以下是一个使用 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 当然)。我们跳过了长度为零的数组以及有符号整数和浮点数的默认实现,因为这些值的表示并不是特别直观。

本库提供了一些有用的宏,用于在常见模式上实现 SerHex。如果您觉得这些宏都不符合您的需求,还提供了一些实用函数,以使实现自定义变体尽可能不痛苦。

注意

如果您只是想寻找通用的十六进制转换特性,请查看广泛使用的 hex 库。此库主要针对可定制的 serde 互操作,如果您不需要这些特性,请优先考虑 hex 库的通用特性。

许可证

许可协议为以下之一:

任选其一。

贡献

除非您明确声明,否则根据 Apache-2.0 许可证定义的,您有意提交以包含在作品中的任何贡献,都将按上述方式双重许可,不附加任何额外条款或条件。

依赖项

~260–500KB
~11K SLoC