The Wasmflow Codec crate contains the serialization and deserialization functions and structures for communicating in and out of Wasmflow Components.
Serializes to a serde_json::Value
which can be printed as a JSON string.
json::serialize
```rust use wasmflow_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
```rust use wasmflow_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(()) }
```
Serializes to a MessagePack [Vec
messagepack::serialize
```rust use wasmflow_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
messagepack::deserialize
```rust use wasmflow_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(()) } ```
The [raw] module uses [serde_value] as an intermediary format to pass around.
```rust use wasmflow_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(()) } ```