#serde #vino #codec #json #messagepack

vino-codec

JSON, Messagepack, & Raw serde value encoding/decoding library

6 releases (3 breaking)

0.9.0 Mar 1, 2022
0.8.0 Nov 15, 2021
0.7.0 Aug 16, 2021
0.6.2 Aug 5, 2021

#579 in WebAssembly

Download history 11/week @ 2022-11-30 36/week @ 2022-12-07 11/week @ 2022-12-14 22/week @ 2022-12-21 23/week @ 2022-12-28 1/week @ 2023-01-04 24/week @ 2023-01-11 28/week @ 2023-01-18 30/week @ 2023-01-25 25/week @ 2023-02-01 17/week @ 2023-02-08 42/week @ 2023-02-15 29/week @ 2023-02-22 10/week @ 2023-03-01 9/week @ 2023-03-08 23/week @ 2023-03-15

86 downloads per month
Used in 3 crates

BSD-3-Clause

12KB
195 lines

Maintenance

The Vino Codec crate contains the serialization and deserialization functions and structures for communicating in and out of Vino Components.

JSON

Serializes to a serde_json::Value which can be printed as a JSON string.

json::serialize

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::deserialize

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

Serializes to a MessagePack [Vec].

messagepack::serialize

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::deserialize

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

The [raw] module uses [serde_value] as an intermediary format to pass around.

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(())
}

Dependencies

~1–1.7MB
~40K SLoC