Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rust 当使用msgpack编码时,JavaScript对象的等价物是什么?_Rust_Msgpack - Fatal编程技术网

Rust 当使用msgpack编码时,JavaScript对象的等价物是什么?

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,

我正在尝试移植一个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]
如您所见,您可以反序列化为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);
}