Skip to main content

selene_core/library/track/
trait_impls.rs

1use sled::{Db, Tree};
2
3use crate::{
4    database::{DatabaseEntry, Patchable, patch_option_replace, patch_replace, track_tree},
5    library::track::{Track, TrackId},
6};
7
8impl DatabaseEntry for Track {
9    type Id = TrackId;
10    const VERSION_NUMBER: u32 = 1;
11
12    fn tree(db: &Db) -> Tree {
13        track_tree(db)
14    }
15
16    fn id(&self) -> TrackId {
17        self.id
18    }
19}
20
21impl PartialEq for Track {
22    fn eq(&self, other: &Self) -> bool {
23        self.id == other.id
24    }
25}
26
27impl Eq for Track {}
28
29impl std::hash::Hash for Track {
30    fn hash<H: std::hash::Hasher>(&self, state: &mut H) {
31        state.write(self.id.as_bytes());
32    }
33}
34
35impl Patchable<Self> for Track {
36    fn patch(&mut self, patch: Self) {
37        let Track {
38            id: _,
39            src_container,
40            lib_container,
41            relative_library_path,
42            metadata,
43            loudnorm_analysis,
44            applied_loudnorm,
45            version: _,
46        } = patch;
47
48        patch_replace(&mut self.src_container, Some(src_container));
49        patch_option_replace(&mut self.lib_container, lib_container);
50        patch_replace(&mut self.relative_library_path, Some(relative_library_path));
51        self.metadata.patch(metadata);
52        patch_option_replace(&mut self.loudnorm_analysis, loudnorm_analysis);
53        patch_option_replace(&mut self.applied_loudnorm, applied_loudnorm);
54    }
55}