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())) diff --git a/src/protocol/arena.rs b/src/protocol/arena.rs index e83360611516969e9e1e97dfff8898cea39fb9a3..b26df73d73b1cb9e3cac8f6fd76bf93297753a69 100644 --- a/src/protocol/arena.rs +++ b/src/protocol/arena.rs @@ -1,7 +1,7 @@ use core::hash::Hash; use core::marker::PhantomData; -#[derive(Debug, serde::Serialize)] +#[derive(Debug, serde::Serialize, serde::Deserialize)] pub struct Id { index: u32, _phantom: PhantomData, diff --git a/src/protocol/ast.rs b/src/protocol/ast.rs index b9878be3d35a35deabb372ceea4df0fc82e40d89..1de74c7b9c77605f21db137a138094e87fd89b53 100644 --- a/src/protocol/ast.rs +++ b/src/protocol/ast.rs @@ -39,7 +39,7 @@ impl ExternalIdentifierId { #[derive(Debug, Clone, Copy, PartialEq)] pub struct TypeAnnotationId(Id); -#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, serde::Serialize)] +#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, serde::Serialize, serde::Deserialize)] pub struct VariableId(Id); #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] @@ -60,7 +60,7 @@ impl LocalId { } } -#[derive(Debug, Clone, Copy, PartialEq, serde::Serialize)] +#[derive(Debug, Clone, Copy, PartialEq, serde::Serialize, serde::Deserialize)] pub struct DefinitionId(Id); #[derive(Debug, Clone, Copy, PartialEq)] @@ -99,7 +99,7 @@ impl PrimitiveId { } } -#[derive(Debug, Clone, Copy, PartialEq, serde::Serialize)] +#[derive(Debug, Clone, Copy, PartialEq, serde::Serialize, serde::Deserialize)] pub struct StatementId(Id); #[derive(Debug, Clone, Copy, PartialEq)] diff --git a/src/protocol/eval.rs b/src/protocol/eval.rs index 84d71a8d02bac4d9c786e41763b7158cf1f7f31b..6abae219507a6695ef85228d29e85aa628fca629 100644 --- a/src/protocol/eval.rs +++ b/src/protocol/eval.rs @@ -28,7 +28,7 @@ trait ValueImpl { fn is_type_compatible(&self, t: &Type) -> bool; } -#[derive(Debug, Clone, serde::Serialize)] +#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] pub enum Value { Input(InputValue), Output(OutputValue), @@ -885,7 +885,7 @@ impl Display for Value { } } -#[derive(Debug, Clone, serde::Serialize)] +#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] pub struct InputValue(pub Port); impl Display for InputValue { @@ -910,7 +910,7 @@ impl ValueImpl for InputValue { } } -#[derive(Debug, Clone, serde::Serialize)] +#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] pub struct OutputValue(pub Port); impl Display for OutputValue { @@ -935,7 +935,7 @@ impl ValueImpl for OutputValue { } } -#[derive(Debug, Clone, serde::Serialize)] +#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] pub struct MessageValue(pub Option); impl Display for MessageValue { @@ -970,7 +970,7 @@ impl ValueImpl for MessageValue { } } -#[derive(Debug, Clone, serde::Serialize)] +#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] pub struct BooleanValue(bool); impl Display for BooleanValue { @@ -999,7 +999,7 @@ impl ValueImpl for BooleanValue { } } -#[derive(Debug, Clone, serde::Serialize)] +#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] pub struct ByteValue(i8); impl Display for ByteValue { @@ -1027,7 +1027,7 @@ impl ValueImpl for ByteValue { } } -#[derive(Debug, Clone, serde::Serialize)] +#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] pub struct ShortValue(i16); impl Display for ShortValue { @@ -1054,7 +1054,7 @@ impl ValueImpl for ShortValue { } } -#[derive(Debug, Clone, serde::Serialize)] +#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] pub struct IntValue(i32); impl Display for IntValue { @@ -1080,7 +1080,7 @@ impl ValueImpl for IntValue { } } -#[derive(Debug, Clone, serde::Serialize)] +#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] pub struct LongValue(i64); impl Display for LongValue { @@ -1105,7 +1105,7 @@ impl ValueImpl for LongValue { } } -#[derive(Debug, Clone, serde::Serialize)] +#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] pub struct InputArrayValue(Vec); impl Display for InputArrayValue { @@ -1139,7 +1139,7 @@ impl ValueImpl for InputArrayValue { } } -#[derive(Debug, Clone, serde::Serialize)] +#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] pub struct OutputArrayValue(Vec); impl Display for OutputArrayValue { @@ -1173,7 +1173,7 @@ impl ValueImpl for OutputArrayValue { } } -#[derive(Debug, Clone, serde::Serialize)] +#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] pub struct MessageArrayValue(Vec); impl Display for MessageArrayValue { @@ -1207,7 +1207,7 @@ impl ValueImpl for MessageArrayValue { } } -#[derive(Debug, Clone, serde::Serialize)] +#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] pub struct BooleanArrayValue(Vec); impl Display for BooleanArrayValue { @@ -1241,7 +1241,7 @@ impl ValueImpl for BooleanArrayValue { } } -#[derive(Debug, Clone, serde::Serialize)] +#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] pub struct ByteArrayValue(Vec); impl Display for ByteArrayValue { @@ -1275,7 +1275,7 @@ impl ValueImpl for ByteArrayValue { } } -#[derive(Debug, Clone, serde::Serialize)] +#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] pub struct ShortArrayValue(Vec); impl Display for ShortArrayValue { @@ -1309,7 +1309,7 @@ impl ValueImpl for ShortArrayValue { } } -#[derive(Debug, Clone, serde::Serialize)] +#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] pub struct IntArrayValue(Vec); impl Display for IntArrayValue { @@ -1343,7 +1343,7 @@ impl ValueImpl for IntArrayValue { } } -#[derive(Debug, Clone, serde::Serialize)] +#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] pub struct LongArrayValue(Vec); impl Display for LongArrayValue { @@ -1377,7 +1377,7 @@ impl ValueImpl for LongArrayValue { } } -#[derive(Debug, Clone, serde::Serialize)] +#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] struct Store { map: HashMap, } @@ -1610,7 +1610,7 @@ pub enum EvalContinuation { Put(Value, Value), } -#[derive(Debug, Clone, serde::Serialize)] +#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] pub struct Prompt { definition: DefinitionId, store: Store, diff --git a/src/protocol/mod.rs b/src/protocol/mod.rs index 948853abb2d906743f90a5f803cb25a5a6a4af03..b8adde87457e2c714fc6cefea8019eab0093d3ee 100644 --- a/src/protocol/mod.rs +++ b/src/protocol/mod.rs @@ -96,7 +96,7 @@ impl ProtocolDescription for ProtocolDescriptionImpl { } } -#[derive(Debug, Clone, serde::Serialize)] +#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] pub struct ComponentStateImpl { prompt: Prompt, }