selene-core 0.7.1

selene-core is the backend for Selene, a local-first music player
Documentation
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)
    }
}