use crate::EntryMetadata;
use serde::{Serialize, de::DeserializeOwned};
use std::hash::Hash;
pub trait BackendKey: Hash + Eq + Clone + Send + Sync {}
impl<T> BackendKey for T where T: Hash + Eq + Clone + Send + Sync {}
pub trait BackendValue: Clone + Send + Sync {}
impl<T> BackendValue for T where T: Clone + Send + Sync {}
pub trait BackendMeta: Clone + Send + Sync {}
impl<T> BackendMeta for T where T: Clone + Send + Sync {}
pub trait StorageKey: BackendKey + Serialize + DeserializeOwned + 'static {}
impl<T> StorageKey for T where T: BackendKey + Serialize + DeserializeOwned + 'static {}
pub trait StorageValue: BackendValue + Serialize + DeserializeOwned + 'static {}
impl<T> StorageValue for T where T: BackendValue + Serialize + DeserializeOwned + 'static {}
pub trait StorageMeta: BackendMeta + Serialize + DeserializeOwned + EntryMetadata {}
impl<T> StorageMeta for T where T: BackendMeta + Serialize + DeserializeOwned + EntryMetadata {}
pub mod memory;
#[cfg(feature = "filesystem-backend")]
pub mod filesystem;