1use serde::{Serialize, Deserialize};
2
3use crate::annotation::Referent;
4use crate::song::{Artist, SongPerformance};
5use crate::user::UserMetadata;
6use crate::Date;
7
8#[derive(Serialize, Deserialize, Debug)]
9pub struct Album {
10 pub api_path: String,
12 #[serde(skip_serializing_if = "Option::is_none")]
15 pub comment_count: Option<u32>,
16 #[serde(skip_serializing_if = "Option::is_none")]
19 pub cover_art_thumbnail_url: Option<String>,
20 pub cover_art_url: String,
22 #[serde(skip_serializing_if = "Option::is_none")]
25 pub custom_header_image_url: Option<String>,
26 pub full_title: String,
28 #[serde(skip_serializing_if = "Option::is_none")]
31 pub header_image_url: Option<String>,
32 pub id: u32,
34 #[serde(skip_serializing_if = "Option::is_none")]
36 pub lock_state: Option<String>,
37 pub name: String,
39 #[serde(skip_serializing_if = "Option::is_none")]
42 pub name_with_artist: Option<String>,
43 #[serde(skip_serializing_if = "Option::is_none")]
46 pub pyongs_count: Option<u32>,
47 #[serde(skip_serializing_if = "Option::is_none")]
50 pub release_date: Option<String>,
51 #[serde(skip_serializing_if = "Option::is_none")]
54 pub release_date_components: Option<Date>,
55 pub url: String,
57 #[serde(skip_serializing_if = "Option::is_none")]
60 pub current_user_metadata: Option<UserMetadata>,
61 #[serde(rename = "song_pageviews", skip_serializing_if = "Option::is_none")]
64 pub album_pageviews: Option<u32>,
65 pub artist: Artist,
67 #[serde(skip_serializing_if = "Option::is_none")]
70 pub cover_arts: Option<Vec<CoverArt>>,
71 #[serde(skip_serializing_if = "Option::is_none")]
74 pub description_annotation: Option<Referent>,
75 #[serde(skip_serializing_if = "Option::is_none")]
78 pub song_performances: Option<Vec<SongPerformance>>,
79}
80
81#[derive(Serialize, Deserialize, Debug)]
82pub struct CoverArt {
83 pub annotated: bool,
85 pub api_path: String,
87 pub id: u32,
89 pub image_url: String,
91 pub thumbnail_image_url: String,
93 pub url: String,
95}