diff options
author | Matthias Beyer <mail@beyermatthias.de> | 2021-04-03 17:18:47 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-04-03 17:18:47 +0200 |
commit | d548ffe24fd4e53a1c441de71fcd8058790e6e41 (patch) | |
tree | 46fb993755298ad665c1b341882e83ef7a43952c | |
parent | 41a87ada6d8d0b3674964621c89bffd7338dd89d (diff) | |
parent | 6e17b500e26288a245434c3e05de37f7dff08605 (diff) |
Merge pull request #193 from matthiasbeyer/misc
Misc changes
-rw-r--r-- | src/source.rs | 15 | ||||
-rw-r--r-- | src/value.rs | 30 |
2 files changed, 16 insertions, 29 deletions
diff --git a/src/source.rs b/src/source.rs index 4d1ba53..8fb4ae3 100644 --- a/src/source.rs +++ b/src/source.rs @@ -14,22 +14,15 @@ pub trait Source: Debug { fn collect(&self) -> Result<HashMap<String, Value>>; fn collect_to(&self, cache: &mut Value) -> Result<()> { - let props = match self.collect() { - Ok(props) => props, - Err(error) => { - return Err(error); - } - }; - - for (key, val) in &props { - match path::Expression::from_str(key) { + self.collect()? + .iter() + .for_each(|(key, val)| match path::Expression::from_str(key) { // Set using the path Ok(expr) => expr.set(cache, val.clone()), // Set diretly anyway _ => path::Expression::Identifier(key.clone()).set(cache, val.clone()), - } - } + }); Ok(()) } diff --git a/src/value.rs b/src/value.rs index 602b40a..39d66bf 100644 --- a/src/value.rs +++ b/src/value.rs @@ -72,13 +72,8 @@ where T: Into<Value>, { fn from(values: HashMap<String, T>) -> Self { - let mut r = HashMap::new(); - - for (k, v) in values { - r.insert(k.clone(), v.into()); - } - - ValueKind::Table(r) + let t = values.into_iter().map(|(k, v)| (k, v.into())).collect(); + ValueKind::Table(t) } } @@ -87,13 +82,7 @@ where T: Into<Value>, { fn from(values: Vec<T>) -> Self { - let mut l = Vec::new(); - - for v in values { - l.push(v.into()); - } - - ValueKind::Array(l) + ValueKind::Array(values.into_iter().map(T::into).collect()) } } @@ -105,10 +94,15 @@ impl Display for ValueKind { ValueKind::Integer(value) => write!(f, "{}", value), ValueKind::Float(value) => write!(f, "{}", value), ValueKind::Nil => write!(f, "nil"), - - // TODO: Figure out a nice Display for these - ValueKind::Table(ref table) => write!(f, "{:?}", table), - ValueKind::Array(ref array) => write!(f, "{:?}", array), + ValueKind::Table(ref table) => write!(f, "{{ {} }}", { + table + .iter() + .map(|(k, v)| format!("{} => {}, ", k, v)) + .collect::<String>() + }), + ValueKind::Array(ref array) => write!(f, "{:?}", { + array.iter().map(|e| format!("{}, ", e)).collect::<String>() + }), } } } |