anni_common/
models.rs

1use std::borrow::{Borrow, Cow};
2use std::num::NonZeroU8;
3
4#[derive(Hash, PartialEq, Eq)]
5pub struct RawTrackIdentifier<'album_id> {
6    pub album_id: Cow<'album_id, str>,
7    pub disc_id: NonZeroU8,
8    pub track_id: NonZeroU8,
9}
10
11impl<'a> RawTrackIdentifier<'a> {
12    pub fn new(album_id: &'a str, disc_id: NonZeroU8, track_id: NonZeroU8) -> Self {
13        Self {
14            album_id: Cow::Borrowed(album_id),
15            disc_id,
16            track_id,
17        }
18    }
19
20    pub fn to_owned(&self) -> TrackIdentifier {
21        TrackIdentifier {
22            inner: RawTrackIdentifier {
23                album_id: Cow::Owned(self.album_id.to_string()),
24                disc_id: self.disc_id,
25                track_id: self.track_id,
26            },
27        }
28    }
29}
30
31impl<'a> Clone for RawTrackIdentifier<'a> {
32    fn clone(&self) -> Self {
33        Self {
34            album_id: Cow::Owned(self.album_id.to_string()),
35            disc_id: self.disc_id,
36            track_id: self.track_id,
37        }
38    }
39}
40
41#[derive(Hash, PartialEq, Eq)]
42pub struct TrackIdentifier {
43    inner: RawTrackIdentifier<'static>,
44}
45
46impl<'a> Borrow<RawTrackIdentifier<'a>> for TrackIdentifier {
47    fn borrow(&self) -> &RawTrackIdentifier<'a> {
48        &self.inner
49    }
50}