From 0c77d287f9ac0ae2dd5a5691d4597a798ee4de3f Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Wed, 31 Mar 2021 15:28:14 +0200 Subject: Simplify implementation This patch simplifies the Source::collect_to() default implementation by making use of the ? operator as well as the std::iter API. Signed-off-by: Matthias Beyer --- src/source.rs | 15 ++++----------- 1 file changed, 4 insertions(+), 11 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>; 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(()) } -- cgit v1.2.3 From 77e9564bca18dbea27abcbf9ba2e35b0b0511784 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Wed, 31 Mar 2021 15:32:39 +0200 Subject: Simplify impl of From> for ValueKind Signed-off-by: Matthias Beyer --- src/value.rs | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/src/value.rs b/src/value.rs index 602b40a..e07239e 100644 --- a/src/value.rs +++ b/src/value.rs @@ -72,13 +72,8 @@ where T: Into, { fn from(values: HashMap) -> 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) } } -- cgit v1.2.3 From 0e651879939ca18b7ce38ffb306c85a183deb67b Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Wed, 31 Mar 2021 15:33:51 +0200 Subject: Simplify impl From> for ValueKind Signed-off-by: Matthias Beyer --- src/value.rs | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/value.rs b/src/value.rs index e07239e..2c0873c 100644 --- a/src/value.rs +++ b/src/value.rs @@ -82,13 +82,7 @@ where T: Into, { fn from(values: Vec) -> 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()) } } -- cgit v1.2.3 From 6e17b500e26288a245434c3e05de37f7dff08605 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Wed, 31 Mar 2021 15:38:30 +0200 Subject: Provide a nice Display impl for ValueKind::{Array, Table} This patch changes the Display impl for ValueKind so that Array and Table are nicely displayed. This basically changes a user-facing implementation in a non-backwards-compatible way. But as the documentation for std states: Display is similar to Debug, but Display is for user-facing output [...] This is user-facing and I'd say this is okay. Signed-off-by: Matthias Beyer --- src/value.rs | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/value.rs b/src/value.rs index 2c0873c..39d66bf 100644 --- a/src/value.rs +++ b/src/value.rs @@ -94,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::() + }), + ValueKind::Array(ref array) => write!(f, "{:?}", { + array.iter().map(|e| format!("{}, ", e)).collect::() + }), } } } -- cgit v1.2.3