summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authortroido <troido@protonmail.com>2020-09-27 16:54:16 +0200
committertroido <troido@protonmail.com>2020-09-27 16:54:16 +0200
commit3b483c793f0f2c8e76f599f74285f237d5dde00e (patch)
tree0f747b38dd74599889ac893a9d6b136ce4826a37 /src
parenta20bcfed7d3b6aacc3211514d9804651a458e725 (diff)
parameterexpression can be serialized now
Diffstat (limited to 'src')
-rw-r--r--src/assemblage.rs2
-rw-r--r--src/parameterexpression.rs23
2 files changed, 21 insertions, 4 deletions
diff --git a/src/assemblage.rs b/src/assemblage.rs
index 9911c77..5541ec1 100644
--- a/src/assemblage.rs
+++ b/src/assemblage.rs
@@ -130,7 +130,7 @@ enum ArgumentDefSave{
Long(String, ParameterType, Parameter),
Short(String, ParameterType)
}
-#[derive(Debug, Clone, PartialEq, Deserialize)]
+#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
struct AssemblageSave {
#[serde(default)]
pub arguments: Vec<ArgumentDefSave>,
diff --git a/src/parameterexpression.rs b/src/parameterexpression.rs
index 2db52ef..b111669 100644
--- a/src/parameterexpression.rs
+++ b/src/parameterexpression.rs
@@ -1,7 +1,7 @@
use std::collections::HashMap;
use rand::Rng;
-use serde::{Deserialize, Deserializer};
+use serde::{Serialize, Deserialize, Deserializer, Serializer};
use crate::{
parameter::{Parameter, ParameterType},
Template,
@@ -126,7 +126,7 @@ impl ParameterExpression {
}
-#[derive(Debug, PartialEq, Clone, Deserialize)]
+#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
enum DynamicParameterExpressionSave {
#[serde(rename = "$arg")]
Argument(String),
@@ -141,7 +141,7 @@ enum DynamicParameterExpressionSave {
#[serde(rename = "$name")]
TemplateName
}
-#[derive(Debug, PartialEq, Clone, Deserialize)]
+#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
#[serde(untagged)]
enum ParameterExpressionSave {
List(Vec<ParameterExpression>),
@@ -179,6 +179,23 @@ impl<'de> Deserialize<'de> for ParameterExpression {
}
}
+impl Serialize for ParameterExpression {
+ fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
+ where S: Serializer {
+ (match self.clone() {
+ Self::Constant(p) => PES::Constant(p),
+ Self::List(l) => PES::List(l),
+ Self::Template{name, save, clan, kwargs} => PES::Template{name, save, clan, kwargs},
+ Self::Argument(a) => PES::Dynamic(DPES::Argument(a)),
+ Self::Random(l) => PES::Dynamic(DPES::Random(l)),
+ Self::Concat(l) => PES::Dynamic(DPES::Concat(l)),
+ Self::If(c, i, e) => PES::Dynamic(DPES::If(c, i, e)),
+ Self::TemplateSelf => PES::Dynamic(DPES::TemplateSelf),
+ Self::TemplateName => PES::Dynamic(DPES::TemplateName)
+ }).serialize(serializer)
+ }
+}
+
#[cfg(test)]
mod tests {
use super::*;