pub trait Storage {
type Error;
fn contains(&self, key: impl AsRef<str>) -> Result<bool, Self::Error>;
fn remove(&mut self, key: impl AsRef<str>) -> Result<bool, Self::Error>;
fn get_raw(
&self,
key: impl AsRef<str>
) -> Result<Option<Vec<u8>>, Self::Error>;
fn put_raw(
&mut self,
key: impl AsRef<str>,
value: impl Into<Vec<u8>>
) -> Result<bool, Self::Error>;
fn len(&self, key: impl AsRef<str>) -> Result<Option<usize>, Self::Error> { ... }
fn get<T: DeserializeOwned>(
&self,
key: impl AsRef<str>
) -> Result<Option<T>, Self::Error> { ... }
fn put(
&mut self,
key: impl AsRef<str>,
value: &impl Serialize
) -> Result<bool, Self::Error> { ... }
}