use core::borrow::Borrow;
#[cfg(feature = "zerocopy")]
mod zerocopy_trait;
#[cfg(not(feature = "zerocopy"))]
mod unsafe_trait;
pub trait TrieKey {
fn key_bytes(&self) -> &[u8];
}
pub trait Equivalent<K: ?Sized> {}
impl<K: TrieKey, Q: TrieKey + Borrow<K>> Equivalent<K> for Q {}
impl TrieKey for str {
fn key_bytes(&self) -> &[u8] {
self.as_bytes()
}
}
impl TrieKey for alloc::string::String {
fn key_bytes(&self) -> &[u8] {
self.as_bytes()
}
}
impl TrieKey for core::ffi::CStr {
fn key_bytes(&self) -> &[u8] {
self.to_bytes()
}
}
impl TrieKey for alloc::ffi::CString {
fn key_bytes(&self) -> &[u8] {
self.as_bytes()
}
}
impl<K: TrieKey + ?Sized> TrieKey for alloc::boxed::Box<K> {
fn key_bytes(&self) -> &[u8] {
K::key_bytes(self)
}
}
impl<K: TrieKey + ?Sized> TrieKey for alloc::sync::Arc<K> {
fn key_bytes(&self) -> &[u8] {
K::key_bytes(self)
}
}
impl<K: TrieKey> TrieKey for alloc::vec::Vec<K>
where
[K]: TrieKey,
{
fn key_bytes(&self) -> &[u8] {
self.as_slice().key_bytes()
}
}
impl<K: TrieKey + ?Sized> TrieKey for &K {
fn key_bytes(&self) -> &[u8] {
(**self).key_bytes()
}
}