trie_rs/trie/
trie_builder.rs

1use super::Trie;
2use crate::map;
3
4#[cfg(feature = "mem_dbg")]
5use mem_dbg::MemDbg;
6
7#[derive(Debug, Clone)]
8#[cfg_attr(feature = "mem_dbg", derive(mem_dbg::MemDbg, mem_dbg::MemSize))]
9#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
10/// A trie builder for [Trie].
11pub struct TrieBuilder<Label>(map::TrieBuilder<Label, ()>);
12
13impl<Label: Ord> TrieBuilder<Label> {
14    /// Return a [TrieBuilder].
15    pub fn new() -> Self {
16        Self(map::TrieBuilder::new())
17    }
18
19    /// Add a cloneable entry.
20    pub fn push<Arr: AsRef<[Label]>>(&mut self, entry: Arr)
21    where
22        Label: Clone,
23    {
24        self.0.push(entry, ());
25    }
26
27    /// Add an entry.
28    pub fn insert<Arr: IntoIterator<Item = Label>>(&mut self, entry: Arr) {
29        self.0.insert(entry, ());
30    }
31
32    /// Build a [Trie].
33    pub fn build(self) -> Trie<Label> {
34        Trie(self.0.build())
35    }
36}
37
38impl<Label: Ord> Default for TrieBuilder<Label> {
39    fn default() -> Self {
40        Self::new()
41    }
42}