selene-core 0.5.0

selene-core is the backend for Selene, a local-first music player
Documentation
use lunar_lib::database::{DatabaseEntry, Tree};

use crate::{
    database::{LibraryDb, Patchable, track_tree},
    library::track::{Track, TrackId},
};

impl DatabaseEntry for Track {
    type Id = TrackId;
    type EntryDb = LibraryDb;

    const VERSION_NUMBER: u32 = 1;

    fn tree(db: &LibraryDb) -> Tree {
        track_tree(db)
    }

    fn id(&self) -> TrackId {
        self.id
    }
}

impl PartialEq for Track {
    fn eq(&self, other: &Self) -> bool {
        self.id == other.id
    }
}

impl Eq for Track {}

impl std::hash::Hash for Track {
    fn hash<H: std::hash::Hasher>(&self, state: &mut H) {
        state.write(&*self.id);
    }
}

impl Patchable<Self> for Track {
    fn patch(&mut self, patch: Self) {
        let Track {
            id: _,
            container: _,
            metadata,
            loudnorm_analysis: _,
            version: _,
        } = patch;

        self.metadata.patch(metadata);
    }
}