use super::{DataMap, MapId};
use anyhow::Result;
use serde::{de::DeserializeOwned, Deserializer, Serialize};
use std::{borrow::Borrow, path::Path};
pub trait Storage: Serialize {
fn open<P: AsRef<Path>>(path: P, context: u16, is_read_only: bool) -> Result<Self>
where
Self: Sized;
fn open_map<K: Serialize + DeserializeOwned, V: Serialize + DeserializeOwned>(&self, map_id: MapId) -> Result<DataMap<K, V>>;
fn import<'de, D: Deserializer<'de>>(&self, deserializer: D) -> Result<(), D::Error>;
fn export(&self) -> Result<serde_json::Value>;
}
pub trait Map<'a, K: Serialize + DeserializeOwned, V: Serialize + DeserializeOwned> {
type Iterator: Iterator<Item = (K, V)>;
type Keys: Iterator<Item = K>;
type Values: Iterator<Item = V>;
fn contains_key<Q>(&self, key: &Q) -> Result<bool>
where
K: Borrow<Q>,
Q: Serialize + ?Sized;
fn get<Q>(&self, key: &Q) -> Result<Option<V>>
where
K: Borrow<Q>,
Q: Serialize + ?Sized;
fn insert<Q>(&self, key: &Q, value: &V) -> Result<()>
where
K: Borrow<Q>,
Q: Serialize + ?Sized;
fn remove<Q>(&self, key: &Q) -> Result<()>
where
K: Borrow<Q>,
Q: Serialize + ?Sized;
fn iter(&'a self) -> Self::Iterator;
fn keys(&'a self) -> Self::Keys;
fn values(&'a self) -> Self::Values;
fn refresh(&self) -> bool {
true
}
}