#json #messagepack #codec #deserialize-json #serde #serde-json #vino

vinocodec

JSON, Messagepack, 以及原始 serde 值编码/解码库

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

BSD-3-Clause

13KB
195

Maintenance

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