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}