6 个版本 (3 个重大更改)
0.9.0 | 2022 年 3 月 1 日 |
---|---|
0.8.0 | 2021 年 11 月 15 日 |
0.7.0 | 2021 年 8 月 16 日 |
0.6.2 | 2021 年 8 月 5 日 |
在 WebAssembly 中排名 497
每月下载量 35
用于 3 crates
13KB
195 行
vinocodec 包含用于与 Vino 组件通信的序列化和反序列化函数和结构。
JSON
序列化为 serde_json::Value
,可以打印为 JSON 字符串。
json::序列化
use vino_codec::{json, Error};
use serde::{Serialize, Deserialize};
pub fn main() -> Result<(), Error> {
#[derive(Serialize, Deserialize)]
struct Point {
x: i32,
y: i32,
}
let point = Point { x: 200, y: 193 };
let value = json::serialize(&point)?;
println!("{:?}", value);
assert_eq!(value, r#"{"x":200,"y":193}"#);
Ok(())
}
json::反序列化
use vino_codec::{json, Error};
use serde::{Serialize, Deserialize};
pub fn main() -> Result<(), Error> {
#[derive(Serialize, Deserialize, Debug, PartialEq)]
struct Point {
x: i32,
y: i32,
}
let json = r#"{"x":200,"y":193}"#;
let instance: Point = json::deserialize(&json)?;
assert_eq!(instance, Point { x: 200, y: 193 });
Ok(())
}
MessagePack
序列化为 MessagePack [Vec]。
messagepack::序列化
use vino_codec::{messagepack, Error};
use serde::{Serialize, Deserialize};
pub fn main() -> Result<(), Error> {
#[derive(Serialize, Deserialize)]
struct Point {
x: i32,
y: i32,
}
let point = Point { x: 200, y: 193 };
let value = messagepack::serialize(&point)?;
println!("{:?}", value);
let expected: Vec<u8> = vec![130, 161, 120, 204, 200, 161, 121, 204, 193];
assert_eq!(value, expected);
Ok(())
}
messagepack::反序列化
use vino_codec::{messagepack, Error};
use serde::{Serialize, Deserialize};
pub fn main() -> Result<(), Error> {
#[derive(Serialize, Deserialize, Debug, PartialEq)]
struct Point {
x: i32,
y: i32,
}
let slice = vec![146, 204, 200, 204, 193];
let instance: Point = messagepack::deserialize(&slice)?;
assert_eq!(instance, Point { x: 200, y: 193 });
Ok(())
}
原始
原始 [raw] 模块使用 [serde_value] 作为中间格式进行传递。
use vino_codec::{raw, Error};
use serde::{Serialize, Deserialize};
pub fn main() -> Result<(), Error> {
#[derive(Serialize, Deserialize, Debug, PartialEq)]
struct Point {
x: i32,
y: i32,
}
let point = Point { x: 200, y: 193 };
let value = raw::serialize(&point)?;
let instance: Point = raw::deserialize(value)?;
assert_eq!(instance, Point { x: 200, y: 193 });
Ok(())
}
依赖关系
~0.6–1.4MB
~31K SLoC