use async_trait::async_trait;
use serde::{Serialize, de::DeserializeOwned};
use crate::Error;
#[cfg(feature = "persistence-sqlite")]
pub mod sqlite;
#[async_trait]
pub trait StatePersistence: Send + Sync {
async fn set<T: Serialize + Send + Sync>(
&self,
key: impl Into<String> + Send + Sync,
value: &T,
) -> Result<(), Error>;
async fn get<T: Serialize + DeserializeOwned + Send + Sync>(
&self,
key: impl AsRef<str> + Send + Sync,
) -> Result<Option<T>, Error>;
async fn remove(&self, key: impl AsRef<str> + Send + Sync) -> Result<(), Error> {
self.take::<serde_json::Value>(key).await?;
Ok(())
}
async fn take<T: DeserializeOwned + Send + Sync>(
&self,
key: impl AsRef<str> + Send + Sync,
) -> Result<Option<T>, Error>;
async fn clear(&self) -> Result<(), Error>;
}