summaryrefslogtreecommitdiff
path: root/src/bindings.rs
diff options
context:
space:
mode:
authorDaniel Silverstone <dsilvers@digital-scurf.org>2020-06-20 12:44:59 +0100
committerDaniel Silverstone <dsilvers@digital-scurf.org>2020-06-20 12:44:59 +0100
commit37565e21534ec83eda0088d55d1680f7e71ab6f1 (patch)
treeb2bede74670daa3886a460ccbcadb06ca11fe5bb /src/bindings.rs
parentf70647d4f57c2adf93daec84c2f510241b60f70d (diff)
downloadsubplot-37565e21534ec83eda0088d55d1680f7e71ab6f1.tar.gz
feat: Ensure keys in bindings files are case insensitive
Signed-off-by: Daniel Silverstone <dsilvers@digital-scurf.org>
Diffstat (limited to 'src/bindings.rs')
-rw-r--r--src/bindings.rs14
1 files changed, 11 insertions, 3 deletions
diff --git a/src/bindings.rs b/src/bindings.rs
index 40ef0b4..84b331b 100644
--- a/src/bindings.rs
+++ b/src/bindings.rs
@@ -5,6 +5,7 @@ use super::StepKind;
use crate::{Result, SubplotError};
use serde::Deserialize;
+use serde_aux::prelude::*;
use std::fs::File;
use std::io::Read;
@@ -257,6 +258,13 @@ struct ParsedBinding {
regex: Option<bool>,
}
+#[derive(Debug, Deserialize)]
+#[serde(transparent)]
+struct ParsedBindingWrapper {
+ #[serde(deserialize_with = "deserialize_struct_case_insensitive")]
+ binding: ParsedBinding,
+}
+
impl Bindings {
/// Create a new, empty set of bindings.
pub fn new() -> Bindings {
@@ -280,9 +288,9 @@ impl Bindings {
/// Add bindings from a YAML string
pub fn add_from_yaml(&mut self, yaml: &str) -> Result<()> {
- let bindings: Vec<ParsedBinding> = serde_yaml::from_str(yaml)?;
- for b in bindings {
- self.add(from_hashmap(&b)?);
+ let bindings: Vec<ParsedBindingWrapper> = serde_yaml::from_str(yaml)?;
+ for wrapper in bindings {
+ self.add(from_hashmap(&wrapper.binding)?);
}
Ok(())
}