pub trait Storage {
// Required methods
fn exists<K>(&self, key: K) -> bool
where K: AsRef<str>;
fn clear(&mut self);
fn remove<K>(&mut self, key: K) -> Result<(), RemoveError>
where K: AsRef<str>;
fn load_raw<K>(&self, key: K) -> Result<Vec<u8, Global>, LoadRawError>
where K: AsRef<str>;
fn store_raw<K, V>(&mut self, key: K, value: V) -> Result<(), StoreRawError>
where K: AsRef<str>,
V: AsRef<[u8]>;
// Provided methods
fn load<K, T, F>(
&self,
key: K,
format: F
) -> Result<T, LoadError<<F as StorageFormat>::DeserializeError>>
where K: AsRef<str>,
T: DeserializeOwned,
F: StorageFormat { ... }
fn store<K, T, F>(
&mut self,
key: K,
value: &T,
format: F
) -> Result<(), StoreError<<F as StorageFormat>::SerializeError>>
where K: AsRef<str>,
T: Serialize,
F: StorageFormat { ... }
}