Skip to main content

nestforge_data/
lib.rs

1use std::{future::Future, pin::Pin};
2
3use thiserror::Error;
4
5pub type DataFuture<'a, T> = Pin<Box<dyn Future<Output = T> + Send + 'a>>;
6
7#[derive(Debug, Error)]
8pub enum DataError {
9    #[error("Connection failed: {0}")]
10    Connection(String),
11    #[error("Query failed: {0}")]
12    Query(String),
13    #[error("Serialization failed: {0}")]
14    Serialization(String),
15    #[error("Not found")]
16    NotFound,
17}
18
19pub trait DocumentRepo<T>: Send + Sync {
20    type Id: Send + Sync + Clone + 'static;
21    fn find_all(&self) -> DataFuture<'_, Result<Vec<T>, DataError>>;
22    fn find_by_id(&self, id: Self::Id) -> DataFuture<'_, Result<Option<T>, DataError>>;
23    fn insert(&self, doc: T) -> DataFuture<'_, Result<T, DataError>>;
24    fn update(&self, id: Self::Id, doc: T) -> DataFuture<'_, Result<T, DataError>>;
25    fn delete(&self, id: Self::Id) -> DataFuture<'_, Result<(), DataError>>;
26}
27
28pub trait CacheStore: Send + Sync {
29    fn get(&self, key: &str) -> DataFuture<'_, Result<Option<String>, DataError>>;
30    fn set(
31        &self,
32        key: &str,
33        value: &str,
34        ttl_seconds: Option<u64>,
35    ) -> DataFuture<'_, Result<(), DataError>>;
36    fn delete(&self, key: &str) -> DataFuture<'_, Result<(), DataError>>;
37}