selene_core/library/track/
trait_impls.rs1use 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}