Rust 当使用msgpack编码时,JavaScript对象的等价物是什么?
我正在尝试移植一个JavaScript,它使用msgpack对JavaScript对象进行编码,使其生锈。我找到了一个用于msgpack编码/解码的Rust库,但我没有得到Rust中的等效输入格式 此JavaScript代码用于编码对象{a:5,b:6} 给出输出82 a1 61 03 a1 62 05: const msgpack=requiremsgpack-lite; msgpack.encodeobj; 我尝试将对象表示为一个Rust结构,并使用库对其进行编码 我得到了输出[146,3,5]。如何在Rust中表示JSON输入 JavaScript对象的等价物是什么 这是一个HashMap: 使用rmp_serde::{反序列化程序、序列化程序、编码::StructMapWriter}; 使用serde::{反序列化,序列化}; 使用std::collections::HashMap; [deriveDebug,序列化,反序列化] pub结构测试{ a:u32, b:u32, } fn干线{ 让mut buf=Vec::new; 让mut val=HashMap::new; val.inserta,3岁; val.insertb,5; val.serialize&mut Serializer::new&mut buf.unwrap; println!{:x?},buf; let test:test=反序列化::反序列化&mut反序列化器::新建&buf[…]。展开; println!{:?},测试; buf.clear; test.serialize&mut序列化程序::with&mut buf,StructMapWriter 打开…的包装 println!{:x?},buf; } 这将给出预期的输出: [82,a1,61,3,a1,62,5] 测试{a:3,b:5} [82,a1,61,3,a1,62,5] 如您所见,您可以反序列化为HashMap以外的内容,但序列化不会产生相同的内容,因为您丢失了HashMap的信息。rmp的主要功能是使用压缩序列化这是默认构造函数,它返回一个序列化程序,该序列化程序将使用压缩元组表示对结构进行序列化,而不使用字段名。但是,如果需要使用StructMapWriter,您可以告诉rmp以不同的方式对其进行序列化 JavaScript对象的等价物是什么 这是一个HashMap: 使用rmp_serde::{反序列化程序、序列化程序、编码::StructMapWriter}; 使用serde::{反序列化,序列化}; 使用std::collections::HashMap; [deriveDebug,序列化,反序列化] pub结构测试{ a:u32, b:u32, } fn干线{ 让mut buf=Vec::new; 让mut val=HashMap::new; val.inserta,3岁; val.insertb,5; val.serialize&mut Serializer::new&mut buf.unwrap; println!{:x?},buf; let test:test=反序列化::反序列化&mut反序列化器::新建&buf[…]。展开; println!{:?},测试; buf.clear; test.serialize&mut序列化程序::with&mut buf,StructMapWriter 打开…的包装 println!{:x?},buf; } 这将给出预期的输出: [82,a1,61,3,a1,62,5] 测试{a:3,b:5} [82,a1,61,3,a1,62,5]Rust 当使用msgpack编码时,JavaScript对象的等价物是什么?,rust,msgpack,Rust,Msgpack,我正在尝试移植一个JavaScript,它使用msgpack对JavaScript对象进行编码,使其生锈。我找到了一个用于msgpack编码/解码的Rust库,但我没有得到Rust中的等效输入格式 此JavaScript代码用于编码对象{a:5,b:6} 给出输出82 a1 61 03 a1 62 05: const msgpack=requiremsgpack-lite; msgpack.encodeobj; 我尝试将对象表示为一个Rust结构,并使用库对其进行编码 我得到了输出[146,3,
如您所见,您可以反序列化为HashMap以外的内容,但序列化不会产生相同的内容,因为您丢失了HashMap的信息。rmp的主要功能是使用压缩序列化这是默认的构造函数,它返回一个序列化程序,该序列化程序将使用压缩元组表示对结构进行序列化,而不使用字段名。但是,如果需要使用StructMapWriter,您可以告诉rmp以不同的方式对其进行序列化。数据序列化和反序列化通常最好使用,它有一个Messagepack的实现。数据序列化和反序列化通常最好使用,它有一个Messagepack的实现。
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);
}