use crate::{BinPtr, EventId, Importance, Object, ObjectId, Updatedness};
use std::sync::Arc;
pub trait Db: 'static + waaaa::Send + waaaa::Sync {
fn create<T: Object>(
&self,
object_id: ObjectId,
created_at: EventId,
object: Arc<T>,
updatedness: Option<Updatedness>,
additional_importance: Importance,
) -> impl waaaa::Future<Output = crate::Result<Option<Arc<T>>>>;
fn submit<T: Object>(
&self,
object_id: ObjectId,
event_id: EventId,
event: Arc<T::Event>,
updatedness: Option<Updatedness>,
additional_importance: Importance,
) -> impl waaaa::Future<Output = crate::Result<Option<Arc<T>>>>;
fn get_latest<T: Object>(
&self,
object_id: ObjectId,
importance: Importance,
) -> impl waaaa::Future<Output = crate::Result<Arc<T>>>;
fn create_binary(
&self,
binary_id: BinPtr,
data: Arc<[u8]>,
) -> impl waaaa::Future<Output = crate::Result<()>>;
fn get_binary(
&self,
binary_id: BinPtr,
) -> impl waaaa::Future<Output = crate::Result<Option<Arc<[u8]>>>>;
fn reencode_old_versions<T: Object>(&self) -> impl waaaa::Future<Output = usize>;
fn assert_invariants_generic(&self) -> impl waaaa::Future<Output = ()>;
fn assert_invariants_for<T: Object>(&self) -> impl waaaa::Future<Output = ()>;
}