mod bucket;
mod simple;
mod string;
#[cfg(feature = "backends")]
pub use self::{
bucket::BucketBackend,
simple::SimpleBackend,
string::StringBackend,
};
use crate::Symbol;
#[cfg(not(feature = "backends"))]
pub struct NoBackend<S>(core::marker::PhantomData<S>);
cfg_if::cfg_if! {
if #[cfg(feature = "backends")] {
pub type DefaultBackend<S> = BucketBackend<S>;
} else {
pub type DefaultBackend<S> = NoBackend<S>;
}
}
pub trait Backend<S>: Default
where
S: Symbol,
{
fn with_capacity(cap: usize) -> Self;
fn intern(&mut self, string: &str) -> S;
#[inline]
fn intern_static(&mut self, string: &'static str) -> S {
self.intern(string)
}
fn shrink_to_fit(&mut self);
fn resolve(&self, symbol: S) -> Option<&str>;
unsafe fn resolve_unchecked(&self, symbol: S) -> &str;
}