use lunar_lib::database::{CustomTransactionError, DatabaseEntry, DbHandle, db_transaction};
use crate::database::{Createable, LibraryDb, Mergeable, tx_extensions::CasTxExtensions};
pub trait EntryExtensions: DatabaseEntry<Db = LibraryDb> {
fn db_create(
args: Self::CreateArgs,
db: DbHandle<Self::Db>,
) -> Result<Self, CustomTransactionError<Self::Err>>
where
Self: Createable;
fn db_merge(
self,
into: Self::Id,
db: DbHandle<Self::Db>,
) -> Result<Self, CustomTransactionError<Self::Err>>
where
Self: Mergeable;
}
impl<T: DatabaseEntry<Db = LibraryDb>> EntryExtensions for T {
fn db_create(
args: T::CreateArgs,
db: DbHandle<T::Db>,
) -> Result<T, CustomTransactionError<T::Err>>
where
T: Createable,
{
db_transaction(|cas_tx| cas_tx.tx_create(args.clone()), db, false)
}
fn db_merge(
self,
into: Self::Id,
db: DbHandle<T::Db>,
) -> Result<Self, CustomTransactionError<T::Err>>
where
T: Mergeable,
{
db_transaction(|cas_tx| cas_tx.tx_merge(self.clone(), into), db, false)
}
}