use crate::database::{
CompareAndSwapTransaction, CustomTransactionError, DatabaseEntry, Entry, Id, TransactionError,
};
pub trait Createable: Sized + DatabaseEntry {
type CreateArgs: Clone;
type Err;
fn create(
args: Self::CreateArgs,
cas_tx: &mut CompareAndSwapTransaction<Self::DbInner>,
) -> Result<Entry<Self>, CustomTransactionError<Self::Err>>;
}
pub trait Mergeable: DatabaseEntry {
fn merge_data(&mut self, from: Self);
fn relink_references(
from: &Entry<Self>,
to: Id<Self>,
cas_tx: &mut CompareAndSwapTransaction<Self::DbInner>,
) -> Result<(), TransactionError>;
}
pub trait Deleteable: Sized + DatabaseEntry {
fn unlink_references(
old: Entry<Self>,
cas_tx: &mut CompareAndSwapTransaction<Self::DbInner>,
) -> Result<(), TransactionError>;
}