【发布时间】:2021-04-18 06:13:26
【问题描述】:
我目前正在使用serde-hex。
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);
// this fails
let binser = bincode::serialize(&foo).unwrap();
let binexp: [u8; 12] = [0, 1, 2, 3, 16, 0, 0, 0, 0, 0, 0, 0];
assert_eq!(binser,binexp);
}
失败:
thread 'wire::era::tests::it_works' panicked at 'assertion failed: `(left == right)`
left: `[10, 0, 0, 0, 0, 0, 0, 0, 48, 120, 48, 48, 48, 49, 48, 50, 48, 51, 4, 0, 0, 0, 0, 0, 0, 0, 48, 120, 49, 48]`,
right: `[0, 1, 2, 3, 16, 0, 0, 0, 0, 0, 0, 0]`', src/test.rs:20:9
因为它已将值扩展为二进制码的十六进制字符串。
我有许多需要用 serde_json 和 bincode 序列化的结构。 serde_hex 正是我需要的 JSON 序列化。使用 bincode 时,serde-hex 仍然会将数组转换为十六进制字符串,这是不想要的。
我注意到secp256k1 uses d.is_human_readable()。
如何使serde_hex 仅适用于serde_json 而被bincode 忽略?
【问题讨论】:
标签: rust serde serde-json bincode