use alloc::boxed::Box;
use core::hash::BuildHasher;
use crate::{LocalLexicon, Reader, Sym};
pub trait Lexicon {
fn intern(&mut self, value: &str) -> Sym;
fn intern_bytes(&mut self, bytes: &[u8]) -> Result<Sym, core::str::Utf8Error>;
#[must_use]
fn get(&self, value: &str) -> Option<Sym>;
#[must_use]
fn len(&self) -> usize;
#[must_use]
fn is_empty(&self) -> bool {
self.len() == 0
}
#[must_use]
fn freeze(self: Box<Self>) -> Box<dyn Reader>;
}
impl<S: BuildHasher> Lexicon for LocalLexicon<S> {
fn intern(&mut self, value: &str) -> Sym {
Self::intern(self, value)
}
fn intern_bytes(&mut self, bytes: &[u8]) -> Result<Sym, core::str::Utf8Error> {
Self::intern_bytes(self, bytes)
}
fn get(&self, value: &str) -> Option<Sym> {
Self::get(self, value)
}
fn len(&self) -> usize {
Self::len(self)
}
fn freeze(self: Box<Self>) -> Box<dyn Reader> {
(*self).into_boxed_reader()
}
}
#[cfg(feature = "std")]
impl<S: BuildHasher> Lexicon for crate::ThreadedLexicon<S> {
fn intern(&mut self, value: &str) -> Sym {
Self::intern(self, value)
}
fn intern_bytes(&mut self, bytes: &[u8]) -> Result<Sym, core::str::Utf8Error> {
Self::intern_bytes(self, bytes)
}
fn get(&self, value: &str) -> Option<Sym> {
Self::get(self, value)
}
fn len(&self) -> usize {
Self::len(self)
}
fn freeze(self: Box<Self>) -> Box<dyn Reader> {
(*self).into_boxed_reader()
}
}