diff options
-rw-r--r-- | src/lib.rs | 71 |
1 files changed, 35 insertions, 36 deletions
@@ -1,4 +1,17 @@ #![doc = include_str!("../README.md")] +#![warn( + elided_lifetimes_in_paths, + explicit_outlives_requirements, + missing_debug_implementations, + noop_method_call, + single_use_lifetimes, + trivial_casts, + trivial_numeric_casts, + unreachable_pub, + unsafe_code, + unused_crate_dependencies, + unused_qualifications +)] #![warn(clippy::pedantic, clippy::cargo)] #[cfg(feature = "parse-knuffel")] @@ -26,43 +39,43 @@ pub struct Schema { impl Schema { /// Panics if ref is not of the form `[id="foo"]`. + #[must_use] pub fn resolve_node_ref(&self, r#ref: &str) -> Option<&Node> { let id = get_id_from_ref(r#ref).expect("invalid ref"); self.document .nodes .iter() - .filter_map(|node| node.find_node_by_id(id)) - .next() + .find_map(|node| node.find_node_by_id(id)) } /// Panics if ref is not of the form `[id="foo"]`. + #[must_use] pub fn resolve_prop_ref(&self, r#ref: &str) -> Option<&Prop> { let id = get_id_from_ref(r#ref).expect("invalid ref"); self.document .nodes .iter() - .filter_map(|node| node.find_prop_by_id(id)) - .next() + .find_map(|node| node.find_prop_by_id(id)) } /// Panics if ref is not of the form `[id="foo"]`. + #[must_use] pub fn resolve_value_ref(&self, r#ref: &str) -> Option<&Value> { let id = get_id_from_ref(r#ref).expect("invalid ref"); self.document .nodes .iter() - .filter_map(|node| node.find_value_by_id(id)) - .next() + .find_map(|node| node.find_value_by_id(id)) } /// Panics if ref is not of the form `[id="foo"]`. + #[must_use] pub fn resolve_children_ref(&self, r#ref: &str) -> Option<&Children> { let id = get_id_from_ref(r#ref).expect("invalid ref"); self.document .nodes .iter() - .filter_map(|node| node.find_children_by_id(id)) - .next() + .find_map(|node| node.find_children_by_id(id)) } } @@ -186,40 +199,36 @@ impl Node { } else { self.children .iter() - .filter_map(|children| children.find_node_by_id(id)) - .next() + .find_map(|children| children.find_node_by_id(id)) } } fn find_prop_by_id(&self, id: &str) -> Option<&Prop> { self.props .iter() - .filter_map(|prop| prop.find_prop_by_id(id)) - .chain( + .find_map(|prop| prop.find_prop_by_id(id)) + .or_else(|| { self.children .iter() - .filter_map(|children| children.find_prop_by_id(id)), - ) - .next() + .find_map(|children| children.find_prop_by_id(id)) + }) } fn find_value_by_id(&self, id: &str) -> Option<&Value> { self.values .iter() - .filter_map(|value| value.find_value_by_id(id)) - .chain( + .find_map(|value| value.find_value_by_id(id)) + .or_else(|| { self.children .iter() - .filter_map(|children| children.find_value_by_id(id)), - ) - .next() + .find_map(|children| children.find_value_by_id(id)) + }) } fn find_children_by_id(&self, id: &str) -> Option<&Children> { self.children .iter() - .filter_map(|children| children.find_children_by_id(id)) - .next() + .find_map(|children| children.find_children_by_id(id)) } } @@ -319,24 +328,15 @@ pub struct Children { impl Children { fn find_node_by_id(&self, id: &str) -> Option<&Node> { - self.nodes - .iter() - .filter_map(|node| node.find_node_by_id(id)) - .next() + self.nodes.iter().find_map(|node| node.find_node_by_id(id)) } fn find_prop_by_id(&self, id: &str) -> Option<&Prop> { - self.nodes - .iter() - .filter_map(|node| node.find_prop_by_id(id)) - .next() + self.nodes.iter().find_map(|node| node.find_prop_by_id(id)) } fn find_value_by_id(&self, id: &str) -> Option<&Value> { - self.nodes - .iter() - .filter_map(|node| node.find_value_by_id(id)) - .next() + self.nodes.iter().find_map(|node| node.find_value_by_id(id)) } fn find_children_by_id(&self, id: &str) -> Option<&Children> { @@ -345,8 +345,7 @@ impl Children { } else { self.nodes .iter() - .filter_map(|node| node.find_children_by_id(id)) - .next() + .find_map(|node| node.find_children_by_id(id)) } } } |