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 |
#573 in WebAssembly
66 downloads per month
Used in 3 crates
13KB
195 lines
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
~0.6–1.5MB
~32K SLoC