am_api/
primitive.rs

1//! Apple music primitive types
2
3use serde::{Deserialize, Serialize};
4use std::fmt::Display;
5
6/// Play parameters
7#[derive(Serialize, Deserialize, Default, Debug, Clone, PartialEq, Eq, Hash)]
8#[serde(rename_all = "camelCase", default)]
9pub struct PlayParameters {
10    /// Song id
11    pub id: String,
12    /// Parameters kind
13    pub kind: String,
14}
15
16/// Editorial notes
17#[derive(Serialize, Deserialize, Default, Debug, Clone, PartialEq, Eq, Hash)]
18#[serde(rename_all = "camelCase", default)]
19pub struct EditorialNotes {
20    /// Name for the editorial notes
21    pub name: Option<String>,
22    /// Abbreviated notes that display inline or when the content appears alongside other content
23    pub short: Option<String>,
24    /// Notes that appear when the content displays prominently
25    pub standard: Option<String>,
26    /// Tag line for the editorial notes
27    pub tagline: Option<String>,
28}
29
30/// Preview
31#[derive(Serialize, Deserialize, Default, Debug, Clone, PartialEq, Eq, Hash)]
32#[serde(rename_all = "camelCase", default)]
33pub struct Preview {
34    /// Preview url
35    pub url: String,
36}
37
38/// Audio variants
39#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, Hash)]
40pub enum AudioVariant {
41    /// Dolby atmos
42    #[serde(rename = "dolby-atmos")]
43    DolbyAtmos,
44    /// Dolby audio
45    #[serde(rename = "dolby-audio")]
46    DolbyAudio,
47    /// Hi-Res lossless
48    #[serde(rename = "hi-res-lossless")]
49    HiResLossless,
50    /// Lossless
51    #[serde(rename = "lossless")]
52    Lossless,
53    /// Lossy stereo
54    #[serde(rename = "lossy-stereo")]
55    LossyStereo,
56}
57
58/// Content rating
59#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, Hash)]
60pub enum ContentRating {
61    /// Clean
62    #[serde(rename = "clean")]
63    Clean,
64    /// Explicit
65    #[serde(rename = "explicit")]
66    Explicit,
67}
68
69/// Track types
70#[derive(Serialize, Deserialize, Debug, Copy, Clone, PartialEq, Eq, Hash)]
71pub enum TrackType {
72    /// Library music video
73    ///
74    /// Resource: [`LibraryMusicVideo`]
75    #[serde(rename = "library-music-videos")]
76    LibraryMusicVideo,
77    /// Library song
78    ///
79    /// Resource: [`LibrarySong`]
80    #[serde(rename = "library-songs")]
81    LibrarySong,
82    /// Music video
83    ///
84    /// Resource: [`MusicVideo`]
85    #[serde(rename = "music-videos")]
86    MusicVideo,
87    /// Song
88    ///
89    /// Resource: [`Song`]
90    #[serde(rename = "songs")]
91    Song,
92}
93
94impl Display for TrackType {
95    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
96        let string = match self {
97            TrackType::LibraryMusicVideo => "library-music-videos",
98            TrackType::LibrarySong => "library-songs",
99            TrackType::MusicVideo => "music-videos",
100            TrackType::Song => "songs",
101        };
102        write!(f, "{}", string)
103    }
104}