selene_core/database/
entry_extensions.rs1use lunar_lib::database::{CustomTransactionError, DatabaseEntry, DbHandle, db_transaction};
2
3use crate::database::{Createable, LibraryDb, Mergeable, tx_extensions::CasTxExtensions};
4
5pub trait EntryExtensions: DatabaseEntry<Db = LibraryDb> {
6 fn db_create(
7 args: Self::CreateArgs,
8 db: DbHandle<Self::Db>,
9 ) -> Result<Self, CustomTransactionError<Self::Err>>
10 where
11 Self: Createable;
12
13 fn db_merge(
14 self,
15 into: Self::Id,
16 db: DbHandle<Self::Db>,
17 ) -> Result<Self, CustomTransactionError<Self::Err>>
18 where
19 Self: Mergeable;
20}
21
22impl<T: DatabaseEntry<Db = LibraryDb>> EntryExtensions for T {
23 fn db_create(
24 args: T::CreateArgs,
25 db: DbHandle<T::Db>,
26 ) -> Result<T, CustomTransactionError<T::Err>>
27 where
28 T: Createable,
29 {
30 db_transaction(|cas_tx| cas_tx.tx_create(args.clone()), db, false)
31 }
32
33 fn db_merge(
34 self,
35 into: Self::Id,
36 db: DbHandle<T::Db>,
37 ) -> Result<Self, CustomTransactionError<T::Err>>
38 where
39 T: Mergeable,
40 {
41 db_transaction(|cas_tx| cas_tx.tx_merge(self.clone(), into), db, false)
42 }
43}