diff options
-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>() + }), } } } |