// This file is part of ICU4X. For terms of use, please see the file // called LICENSE at the top level of the ICU4X source tree // (online at: https://github.com/unicode-org/icu4x/blob/main/LICENSE ). //! A data structure offering zero-copy storage and retrieval of byte strings, with a focus //! on the efficient storage of ASCII strings. Strings are mapped to `usize` values. //! //! [`ZeroTrie`] does not support mutation because doing so would require recomputing the entire //! data structure. Instead, it supports conversion to and from [`LiteMap`] and [`BTreeMap`]. //! //! There are multiple variants of [`ZeroTrie`] optimized for different use cases. //! //! # Examples //! //! ``` //! use zerotrie::ZeroTrie; //! //! let data: &[(&str, usize)] = &[("abc", 11), ("xyz", 22), ("axyb", 33)]; //! //! let trie: ZeroTrie> = data.iter().copied().collect(); //! //! assert_eq!(trie.get("axyb"), Some(33)); //! assert_eq!(trie.byte_len(), 18); //! ``` //! //! # Internal Structure //! //! To read about the internal structure of [`ZeroTrie`], build the docs with private modules: //! //! ```bash //! cargo doc --document-private-items --all-features --no-deps --open //! ``` //! //! [`LiteMap`]: litemap::LiteMap //! [`BTreeMap`]: alloc::collections::BTreeMap // https://github.com/unicode-org/icu4x/blob/main/documents/process/boilerplate.md#library-annotations #![cfg_attr(not(any(test, doc)), no_std)] #![cfg_attr( not(test), deny( // TODO(#4034): Enable the rest of these lints. // clippy::indexing_slicing, // clippy::unwrap_used, clippy::expect_used, // clippy::panic, clippy::exhaustive_structs, clippy::exhaustive_enums, clippy::trivially_copy_pass_by_ref, missing_debug_implementations, ) )] #![warn(missing_docs)] #[cfg(feature = "alloc")] extern crate alloc; mod builder; mod byte_phf; pub mod cursor; mod error; #[macro_use] mod helpers; mod options; mod reader; #[cfg(feature = "serde")] mod serde; mod varint; mod zerotrie; pub use crate::zerotrie::ZeroAsciiIgnoreCaseTrie; pub use crate::zerotrie::ZeroTrie; pub use crate::zerotrie::ZeroTrieExtendedCapacity; pub use crate::zerotrie::ZeroTriePerfectHash; pub use crate::zerotrie::ZeroTrieSimpleAscii; pub use error::ZeroTrieBuildError; #[cfg(feature = "alloc")] pub use crate::zerotrie::ZeroTrieStringIterator; #[cfg(feature = "alloc")] pub use reader::ZeroTrieIterator; #[doc(hidden)] pub mod _internal { pub use crate::byte_phf::f1; pub use crate::byte_phf::f2; pub use crate::byte_phf::PerfectByteHashMap; }