From 011b809e104242f7fe9f6c00a54804b1cf0e125c Mon Sep 17 00:00:00 2001 From: Ryan Leckey Date: Sun, 30 Jul 2017 13:46:04 -0700 Subject: Impl Config for Source to allow merging whole configs; closes #28 --- src/config.rs | 10 ++++++++++ tests/merge.rs | 20 ++++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/src/config.rs b/src/config.rs index 0ff2601..f890461 100644 --- a/src/config.rs +++ b/src/config.rs @@ -190,3 +190,13 @@ impl Config { self.get(key).and_then(Value::into_array) } } + +impl Source for Config { + fn clone_into_box(&self) -> Box { + Box::new((*self).clone()) + } + + fn collect(&self) -> Result> { + self.cache.clone().into_table() + } +} diff --git a/tests/merge.rs b/tests/merge.rs index f83eef8..d6eb9e0 100644 --- a/tests/merge.rs +++ b/tests/merge.rs @@ -25,3 +25,23 @@ fn test_merge() { ); assert_eq!(c.get("place.rating").ok(), Some(4.9)); } + +#[test] +fn test_merge_whole_config() { + let mut c1 = Config::default(); + let mut c2 = Config::default(); + + c1.set("x", 10).unwrap(); + c2.set("y", 25).unwrap(); + + assert_eq!(c1.get("x").ok(), Some(10)); + assert_eq!(c2.get::<()>("x").ok(), None); + + assert_eq!(c2.get("y").ok(), Some(25)); + assert_eq!(c1.get::<()>("y").ok(), None); + + c1.merge(c2).unwrap(); + + assert_eq!(c1.get("x").ok(), Some(10)); + assert_eq!(c1.get("y").ok(), Some(25)); +} -- cgit v1.2.3