pub mod error;
use std::{fmt, sync::Arc};
use async_trait::async_trait;
pub use error::KvError;
use foundationdb::{Database, FdbBindingError};
use serde::Serialize;
#[derive(Clone)]
pub enum RangeQuery<T> {
StartAndStop(T, T),
StartAndNbResult(T, usize),
NFirstResults(usize),
All,
}
#[async_trait]
pub trait FdbStore: Send + Sync + fmt::Debug + Sized + Clone {
async fn load<T>(db: Arc<Database>, key: &T) -> Result<Self, KvError>
where
T: Serialize + Sync + Sized;
async fn load_in_trx<T>(
trx: &foundationdb::RetryableTransaction,
key: &T,
) -> Result<Self, foundationdb::FdbBindingError>
where
T: Serialize + Sync + Sized;
async fn load_by_range<T>(
db: Arc<Database>,
query: RangeQuery<T>,
) -> Result<Vec<Self>, KvError>
where
T: Serialize + Sync + Sized + std::marker::Send + Clone;
async fn load_by_range_in_trx<T>(
trx: &foundationdb::RetryableTransaction,
query: RangeQuery<T>,
) -> Result<Vec<Self>, foundationdb::FdbBindingError>
where
T: Serialize + Sync + Sized + std::marker::Send;
async fn save(&self, db: Arc<Database>) -> Result<(), KvError>;
async fn save_in_trx(
&self,
trx: &foundationdb::RetryableTransaction,
) -> Result<(), FdbBindingError>;
async fn delete(&self, db: Arc<Database>) -> Result<(), KvError>;
async fn delete_in_trx(
&self,
trx: &foundationdb::RetryableTransaction,
) -> Result<(), FdbBindingError>;
async fn update(&self, db: Arc<Database>, new_value: Self) -> Result<(), KvError>;
async fn update_in_trx(
&self,
trx: &foundationdb::RetryableTransaction,
new_value: Self,
) -> Result<(), FdbBindingError>;
async fn load_by_index<T>(
db: Arc<Database>,
index_name: &str,
index_value: T,
) -> Result<Vec<Self>, KvError>
where
T: Serialize + Sync + Sized + Send + Clone;
async fn load_by_index_in_trx<T>(
trx: &foundationdb::RetryableTransaction,
index_name: &str,
index_value: T,
) -> Result<Vec<Self>, foundationdb::FdbBindingError>
where
T: Serialize + Sync + Sized + Send + Clone;
async fn load_by_unique_index<T>(
db: Arc<Database>,
index_name: &str,
index_value: T,
) -> Result<Self, KvError>
where
T: Serialize + Sync + Sized + Send + Clone;
async fn load_by_unique_index_in_trx<T>(
trx: &foundationdb::RetryableTransaction,
index_name: &str,
index_value: T,
) -> Result<Self, foundationdb::FdbBindingError>
where
T: Serialize + Sync + Sized + Send + Clone;
async fn load_by_unique_index_range<T>(
db: Arc<Database>,
index_name: &str,
query: RangeQuery<T>,
ignore_first_result: bool,
) -> Result<Vec<Self>, KvError>
where
T: Serialize + Sync + Sized + Send + Clone;
async fn load_by_unique_index_in_trx_range<T>(
trx: &foundationdb::RetryableTransaction,
index_name: &str,
query: RangeQuery<T>,
ignore_first_result: bool,
) -> Result<Vec<Self>, foundationdb::FdbBindingError>
where
T: Serialize + Sync + Sized + Send + Clone;
}