diff options
author | Kerhong <edgars.baduns@gmail.com> | 2015-09-25 19:26:47 +0300 |
---|---|---|
committer | Kerhong <edgars.baduns@gmail.com> | 2015-09-25 19:26:47 +0300 |
commit | 547e202c15e814830d7e118a88a244becef2d269 (patch) | |
tree | 6e1cdcb17a2a5cf753da415b5cfaf7b7f01f62fd | |
parent | bb12015a8a830b3c35292ded6f1f933762aa0355 (diff) | |
download | milf-rs-547e202c15e814830d7e118a88a244becef2d269.tar.gz milf-rs-547e202c15e814830d7e118a88a244becef2d269.zip |
Implement Value::lookup for empty path to return self
-rw-r--r-- | src/lib.rs | 20 |
1 files changed, 20 insertions, 0 deletions
@@ -155,6 +155,8 @@ impl Value { /// /// Note: arrays have zero-based indexes. /// + /// Note: empty path returns self. + /// /// ``` /// # #![allow(unstable)] /// let toml = r#" @@ -180,6 +182,10 @@ impl Value { /// ``` pub fn lookup<'a>(&'a self, path: &'a str) -> Option<&'a Value> { let mut cur_value = self; + if path.len() == 0 { + return Some(cur_value) + } + for key in path.split('.') { match cur_value { &Value::Table(ref hm) => { @@ -260,4 +266,18 @@ mod tests { let foo = value.lookup("values.str.foo"); assert!(foo.is_none()); } + + #[test] + fn lookup_self() { + let value: Value = r#"foo = "bar""#.parse().unwrap(); + + let foo = value.lookup("foo").unwrap(); + assert_eq!(foo.as_str().unwrap(), "bar"); + + let foo = value.lookup("").unwrap(); + assert!(foo.as_table().is_some()); + + let baz = foo.lookup("foo").unwrap(); + assert_eq!(baz.as_str().unwrap(), "bar"); + } } |