From 481b8c5d0edeb48f2b686df9af8d91aab0a623a3 Mon Sep 17 00:00:00 2001 From: Martin von Zweigbergk Date: Sun, 7 May 2023 08:42:16 -0700 Subject: [PATCH] id_prefix: add `IdIndex::resolve_prefix()` I'll use this in `IdPrefixContext` soon. --- lib/src/id_prefix.rs | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/lib/src/id_prefix.rs b/lib/src/id_prefix.rs index 347b74bfa..59d976ae6 100644 --- a/lib/src/id_prefix.rs +++ b/lib/src/id_prefix.rs @@ -86,6 +86,15 @@ where } } + /// Looks up entries with the given prefix, and collects values if matched + /// entries have unambiguous keys. + pub fn resolve_prefix(&self, prefix: &HexPrefix) -> PrefixResolution> + where + V: Clone, + { + self.resolve_prefix_with(prefix, |v: &V| v.clone()) + } + /// Iterates over entries with the given prefix. pub fn resolve_prefix_range<'a: 'b, 'b>( &'a self, @@ -150,35 +159,35 @@ mod tests { (ChangeId::from_hex("0aab"), 4), ]); assert_eq!( - id_index.resolve_prefix_with(&HexPrefix::new("0").unwrap(), |&v| v), + id_index.resolve_prefix(&HexPrefix::new("0").unwrap()), PrefixResolution::AmbiguousMatch, ); assert_eq!( - id_index.resolve_prefix_with(&HexPrefix::new("00").unwrap(), |&v| v), + id_index.resolve_prefix(&HexPrefix::new("00").unwrap()), PrefixResolution::AmbiguousMatch, ); assert_eq!( - id_index.resolve_prefix_with(&HexPrefix::new("000").unwrap(), |&v| v), + id_index.resolve_prefix(&HexPrefix::new("000").unwrap()), PrefixResolution::SingleMatch(vec![0]), ); assert_eq!( - id_index.resolve_prefix_with(&HexPrefix::new("0001").unwrap(), |&v| v), + id_index.resolve_prefix(&HexPrefix::new("0001").unwrap()), PrefixResolution::NoMatch, ); assert_eq!( - sorted(id_index.resolve_prefix_with(&HexPrefix::new("009").unwrap(), |&v| v)), + sorted(id_index.resolve_prefix(&HexPrefix::new("009").unwrap())), PrefixResolution::SingleMatch(vec![1, 2]), ); assert_eq!( - id_index.resolve_prefix_with(&HexPrefix::new("0aa").unwrap(), |&v| v), + id_index.resolve_prefix(&HexPrefix::new("0aa").unwrap()), PrefixResolution::AmbiguousMatch, ); assert_eq!( - id_index.resolve_prefix_with(&HexPrefix::new("0aab").unwrap(), |&v| v), + id_index.resolve_prefix(&HexPrefix::new("0aab").unwrap()), PrefixResolution::SingleMatch(vec![4]), ); assert_eq!( - id_index.resolve_prefix_with(&HexPrefix::new("f").unwrap(), |&v| v), + id_index.resolve_prefix(&HexPrefix::new("f").unwrap()), PrefixResolution::NoMatch, ); }