diff options
author | Daniel Silverstone <dsilvers@digital-scurf.org> | 2020-06-20 12:44:59 +0100 |
---|---|---|
committer | Daniel Silverstone <dsilvers@digital-scurf.org> | 2020-06-20 12:44:59 +0100 |
commit | 37565e21534ec83eda0088d55d1680f7e71ab6f1 (patch) | |
tree | b2bede74670daa3886a460ccbcadb06ca11fe5bb /src/bindings.rs | |
parent | f70647d4f57c2adf93daec84c2f510241b60f70d (diff) | |
download | subplot-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.rs | 14 |
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(()) } |