diff --git a/src/node/collection.rs b/src/node/collection.rs index 4d26461..b4d935e 100644 --- a/src/node/collection.rs +++ b/src/node/collection.rs @@ -130,27 +130,20 @@ impl NodeCollection { Ok(node) } - pub fn pointer<'a>(&'a self, pointer: &str) -> Option<&'a NodeCollection> { - if pointer == "" { + pub fn pointer<'a>(&'a self, pointer: &[&str]) -> Option<&'a NodeCollection> { + if pointer.is_empty() { return Some(self); } - if !pointer.starts_with('/') { - return None; - } - let tokens = pointer - .split('/') - .skip(1) - .map(|x| x.replace("~1", "/").replace("~0", "~")); let mut target = self; - for token in tokens { - let target_opt = if let Some(index) = parse_index(&token) { + for token in pointer { + let target_opt = if let Some(index) = parse_index(token) { eprintln!("index: {}", index); target.children().get(index) } else { eprintln!("token: {:?}", token); target.children().iter().find(|ref child| { - child.base().key().ok().and_then(|x| x).expect("key not parseable") == token + child.base().key().ok().and_then(|x| x).expect("key not parseable") == *token }) }; diff --git a/src/node/mod.rs b/src/node/mod.rs index 10708fb..39f2726 100644 --- a/src/node/mod.rs +++ b/src/node/mod.rs @@ -253,7 +253,7 @@ impl Node { None } - pub fn pointer(&self, pointer: &[&str]) -> Option<&Node> { + pub fn pointer<'a>(&'a self, pointer: &[&str]) -> Option<&'a Node> { if pointer.is_empty() { return Some(self); } @@ -265,7 +265,7 @@ impl Node { None => return None, }; - let target_opt = if let Some(index) = parse_index(&token) { + let target_opt = if let Some(index) = parse_index(token) { eprintln!("index: {}", index); children.get(index) } else {