#wapc #wasi #sdk #api-bindings

wapc-codec

A standard implementation of MessagePack serialization and deserialization for waPC communication

3 releases (stable)

1.1.0 Mar 23, 2023
1.0.0 Feb 10, 2022
1.0.0-alpha.0 Jan 21, 2022

#1172 in WebAssembly

Download history 2/week @ 2023-12-03 10/week @ 2023-12-10 37/week @ 2023-12-17 29/week @ 2023-12-24 6/week @ 2023-12-31 23/week @ 2024-01-07 26/week @ 2024-01-14 6/week @ 2024-01-21 27/week @ 2024-01-28 41/week @ 2024-02-04 103/week @ 2024-02-11 79/week @ 2024-02-18 91/week @ 2024-02-25 48/week @ 2024-03-03 29/week @ 2024-03-10 38/week @ 2024-03-17

213 downloads per month
Used in wapc-guest

Apache-2.0

10KB
149 lines

waPC messagepack codec

crates.io license

This crates contains common serialization and deserialization methods for communicating in and out of waPC modules.

waPC does not require MessagePack but it does require a communication contract between hosts and guests. The waPC CLI code generator uses this crate but you are free to use what you want.

Example

The following is a simple example of synchronous, bi-directional procedure calls between a WebAssembly host runtime and the guest module.

use serde::{Deserialize, Serialize};
use wapc_codec::messagepack::{deserialize, serialize};

#[derive(Deserialize, Serialize, Debug)]
struct Person {
  first_name: String,
  last_name: String,
  age: u8,
}

pub fn main() -> Result<(), Box<dyn std::error::Error>> {
  let person = Person {
    first_name: "Samuel".to_owned(),
    last_name: "Clemens".to_owned(),
    age: 49,
  };

  println!("Original : {:?}", person);

  let bytes = serialize(&person)?;

  println!("Serialized messagepack bytes: {:?}", bytes);

  let round_trip: Person = deserialize(&bytes)?;

  println!("Deserialized : {:?}", round_trip);

  Ok(())
}

Dependencies

~110–430KB