wasmflow_codec/
messagepack.rs

1use std::io::Cursor;
2
3use rmp_serde::{Deserializer, Serializer};
4use serde::{Deserialize, Serialize};
5
6use crate::error::CodecError;
7use crate::Result;
8
9#[doc(hidden)]
10pub fn rmp_serialize<T>(item: &T) -> std::result::Result<Vec<u8>, rmp_serde::encode::Error>
11where
12  T: ?Sized + Serialize,
13{
14  let mut buf = Vec::new();
15  match item.serialize(&mut Serializer::new(&mut buf).with_struct_map()) {
16    Ok(_) => Ok(buf),
17    Err(e) => Err(e),
18  }
19}
20
21/// The standard function for serializing codec structs into a format that can be.
22/// used for message exchange between actor and host. Use of any other function to.
23/// serialize could result in breaking incompatibilities.
24pub fn serialize<T>(item: &T) -> Result<Vec<u8>>
25where
26  T: ?Sized + Serialize,
27{
28  rmp_serialize(item).map_err(CodecError::MessagePackSerializationError)
29}
30
31#[doc(hidden)]
32pub fn rmp_deserialize<'de, T: Deserialize<'de>>(buf: &[u8]) -> std::result::Result<T, rmp_serde::decode::Error> {
33  let mut de = Deserializer::new(Cursor::new(buf));
34  Deserialize::deserialize(&mut de)
35}
36
37/// The standard function for de-serializing codec structs from a format suitable.
38/// for message exchange between actor and host. Use of any other function to.
39/// deserialize could result in breaking incompatibilities.
40pub fn deserialize<'de, T: Deserialize<'de>>(buf: &[u8]) -> Result<T> {
41  rmp_deserialize(buf).map_err(CodecError::MessagePackDeserializationError)
42}