golem_wasm/
serde.rs

1use crate::WitValue;
2use serde::{Deserialize, Deserializer, Serialize};
3
4impl<'de> Deserialize<'de> for WitValue {
5    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
6    where
7        D: Deserializer<'de>,
8    {
9        let binary = Vec::<u8>::deserialize(deserializer)?;
10        bincode::decode_from_slice(&binary, bincode::config::standard())
11            .map_err(serde::de::Error::custom)
12            .map(|(value, _)| value)
13    }
14}
15
16impl Serialize for WitValue {
17    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
18    where
19        S: serde::Serializer,
20    {
21        let binary = bincode::encode_to_vec(self, bincode::config::standard())
22            .map_err(serde::ser::Error::custom)?;
23        binary.serialize(serializer)
24    }
25}