zerotrie/builder/
litemap.rs1use super::konst::*;
8use crate::builder::bytestr::ByteStr;
9use crate::error::ZeroTrieBuildError;
10use crate::zerotrie::ZeroTrieSimpleAscii;
11use crate::ZeroTrie;
12use alloc::borrow::Borrow;
13use alloc::vec::Vec;
14use litemap::LiteMap;
15
16impl ZeroTrieSimpleAscii<Vec<u8>> {
17 #[doc(hidden)]
18 pub fn try_from_litemap_with_const_builder<'a, S>(
19 items: &LiteMap<&'a [u8], usize, S>,
20 ) -> Result<Self, ZeroTrieBuildError>
21 where
22 S: litemap::store::StoreSlice<&'a [u8], usize, Slice = [(&'a [u8], usize)]>,
23 {
24 let tuples = items.as_slice();
25 let byte_str_slice = ByteStr::from_byte_slice_with_value(tuples);
26 ZeroTrieBuilderConst::<10000>::from_sorted_const_tuple_slice::<100>(byte_str_slice.into())
27 .map(|s| Self {
28 store: s.as_bytes().to_vec(),
29 })
30 }
31}
32
33impl<K, S> TryFrom<&LiteMap<K, usize, S>> for ZeroTrie<Vec<u8>>
34where
35 K: Borrow<[u8]>,
38 S: litemap::store::StoreSlice<K, usize, Slice = [(K, usize)]>,
39{
40 type Error = ZeroTrieBuildError;
41 fn try_from(items: &LiteMap<K, usize, S>) -> Result<Self, ZeroTrieBuildError> {
42 let byte_litemap = items.to_borrowed_keys::<[u8], Vec<_>>();
43 let byte_slice = byte_litemap.as_slice();
44 let byte_str_slice = ByteStr::from_byte_slice_with_value(byte_slice);
45 Self::try_from_tuple_slice(byte_str_slice)
46 }
47}
48
49