From 387fc2ea30c34ef1ce7a26c68f1d99409013ccac Mon Sep 17 00:00:00 2001 From: Matt Bilker Date: Mon, 14 Jan 2019 20:36:41 +0000 Subject: [PATCH] node: update pointer method in NodeCollection to match Node --- src/node/collection.rs | 17 +++++------------ src/node/mod.rs | 4 ++-- 2 files changed, 7 insertions(+), 14 deletions(-) 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 {