1use js_sys::Uint8Array;
2use serde::{Deserialize, Serialize};
3use wasm_bindgen::JsValue;
4
5pub trait Codec {
7 fn encode<I>(input: I) -> JsValue
9 where
10 I: Serialize;
11
12 fn decode<O>(input: JsValue) -> O
14 where
15 O: for<'de> Deserialize<'de>;
16}
17
18#[derive(Debug)]
20pub struct Bincode;
21
22impl Codec for Bincode {
23 fn encode<I>(input: I) -> JsValue
24 where
25 I: Serialize,
26 {
27 let buf = bincode::serialize(&input).expect("can't serialize an worker message");
28 Uint8Array::from(buf.as_slice()).into()
29 }
30
31 fn decode<O>(input: JsValue) -> O
32 where
33 O: for<'de> Deserialize<'de>,
34 {
35 let data = Uint8Array::from(input).to_vec();
36 bincode::deserialize(&data).expect("can't deserialize an worker message")
37 }
38}