diff --git a/src/common.rs b/src/common.rs index d3e98a1106c63286875543bd83c8429075bc061e..810d1d29f9a313a7005336f337ad784916cfee61 100644 --- a/src/common.rs +++ b/src/common.rs @@ -35,18 +35,6 @@ pub struct PortId { #[derive(Debug, Clone, Eq, PartialEq, Ord, PartialOrd)] pub struct Payload(Arc>); -impl serde::Serialize for Payload { - fn serialize( - &self, - serializer: S, - ) -> std::result::Result<::Ok, ::Error> - where - S: serde::Serializer, - { - let inner: &Vec = &self.0; - inner.serialize(serializer) - } -} /// This is a unique identifier for a channel (i.e., port). #[derive(Debug, Eq, PartialEq, Clone, Hash, Copy, Ord, PartialOrd)] @@ -61,7 +49,9 @@ pub enum Polarity { Getter, // input port (from the perspective of the component) } -#[derive(Eq, PartialEq, Ord, PartialOrd, Hash, Copy, Clone, serde::Serialize)] +#[derive( + Eq, PartialEq, Ord, PartialOrd, Hash, Copy, Clone, serde::Serialize, serde::Deserialize, +)] #[repr(C)] pub struct Port(pub u32); // ports are COPY @@ -153,6 +143,29 @@ impl Payload { me.extend(bytes); } } +impl serde::Serialize for Payload { + fn serialize( + &self, + serializer: S, + ) -> std::result::Result<::Ok, ::Error> + where + S: serde::Serializer, + { + let inner: &Vec = &self.0; + inner.serialize(serializer) + } +} +impl<'de> serde::Deserialize<'de> for Payload { + fn deserialize( + deserializer: D, + ) -> std::result::Result>::Error> + where + D: serde::Deserializer<'de>, + { + let inner: Vec = Vec::deserialize(deserializer)?; + Ok(Self(Arc::new(inner))) + } +} impl std::iter::FromIterator for Payload { fn from_iter>(it: I) -> Self { Self(Arc::new(it.into_iter().collect()))