From 586ea078691120c3059ac3790a0e403bf2a1fa98 Mon Sep 17 00:00:00 2001 From: Damien Elmes Date: Fri, 12 Feb 2021 09:30:21 +1000 Subject: [PATCH] avoid wrapping outermost search in parens --- rslib/src/backend/mod.rs | 11 ++++------- rslib/src/search/parser.rs | 10 ++++++++++ 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/rslib/src/backend/mod.rs b/rslib/src/backend/mod.rs index 8374daafb..7838b4627 100644 --- a/rslib/src/backend/mod.rs +++ b/rslib/src/backend/mod.rs @@ -548,7 +548,8 @@ impl BackendService for Backend { //----------------------------------------------- fn build_search_string(&self, input: pb::SearchNode) -> Result { - Ok(write_nodes(&[input.try_into()?]).into()) + let node: Node = input.try_into()?; + Ok(write_nodes(&node.into_node_list()).into()) } fn search_cards(&self, input: pb::SearchCardsIn) -> Result { @@ -573,12 +574,8 @@ impl BackendService for Backend { fn join_search_nodes(&self, input: pb::JoinSearchNodesIn) -> Result { let sep = input.joiner().into(); let existing_nodes = { - let node = input.existing_node.unwrap_or_default().try_into()?; - if let Node::Group(nodes) = node { - nodes - } else { - vec![node] - } + let node: Node = input.existing_node.unwrap_or_default().try_into()?; + node.into_node_list() }; let additional_node = input.additional_node.unwrap_or_default().try_into()?; Ok(concatenate_searches(sep, existing_nodes, additional_node).into()) diff --git a/rslib/src/search/parser.rs b/rslib/src/search/parser.rs index d44a61ad3..971ffdb8d 100644 --- a/rslib/src/search/parser.rs +++ b/rslib/src/search/parser.rs @@ -46,6 +46,16 @@ impl Node { Node::Not(Box::new(self)) } } + + /// If we're a group, return the contained elements. + /// If we're a single node, return ourselves in an one-element vec. + pub fn into_node_list(self) -> Vec { + if let Node::Group(nodes) = self { + nodes + } else { + vec![self] + } + } } #[derive(Debug, PartialEq, Clone)]