Skip to main content

selene_core/database/
entry_extensions.rs

1use 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}