use sled::{Db, Tree};
use crate::{
database::{DatabaseEntry, Patchable, patch_option_replace, patch_replace, track_tree},
library::track::{Track, TrackId},
};
impl DatabaseEntry for Track {
type Id = TrackId;
const VERSION_NUMBER: u32 = 1;
fn tree(db: &Db) -> 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.as_bytes());
}
}
impl Patchable<Self> for Track {
fn patch(&mut self, patch: Self) {
let Track {
id: _,
src_container,
lib_container,
relative_library_path,
metadata,
loudnorm_analysis,
applied_loudnorm,
version: _,
} = patch;
patch_replace(&mut self.src_container, Some(src_container));
patch_option_replace(&mut self.lib_container, lib_container);
patch_replace(&mut self.relative_library_path, Some(relative_library_path));
self.metadata.patch(metadata);
patch_option_replace(&mut self.loudnorm_analysis, loudnorm_analysis);
patch_option_replace(&mut self.applied_loudnorm, applied_loudnorm);
}
}