【发布时间】:2019-03-27 10:59:58
【问题描述】:
我正在尝试移植一个 JavaScript library,它使用 msgpack 将 JavaScript 对象编码为 Rust。我找到了一个用于 msgpack 编码/解码的 Rust 库,但我不知道 Rust 中的等效输入格式是什么。
此 JavaScript 代码用于编码对象 {"a": 5, "b": 6}
给出输出82 a1 61 03 a1 62 05:
const msgpack = require("msgpack-lite");
msgpack.encode(obj);
我尝试将对象表示为 Rust 结构并使用 rmp-serde 库对其进行编码
use rmp_serde::{Deserializer, Serializer};
use serde::{Deserialize, Serialize};
#[derive(Debug, Serialize, Deserialize)]
pub struct Test {
a: u32,
b: u32,
}
fn main() {
let mut buf = Vec::new();
let val = Test { a: 3, b: 5 };
val.serialize(&mut Serializer::new(&mut buf)).unwrap();
println!("{:?}", buf);
}
我得到了输出[146, 3, 5]。如何在 Rust 中表示 JSON 输入?
【问题讨论】:
-
数据序列化和反序列化通常最好使用Serde,它有一个Messagepack的实现。