use {
serde::{Deserialize, Serialize},
serde_json::Value,
};
use crate::models::{
AlbumsSameArtist, Area, Article, Artist, Award, Focus, Genre, Goody, Image, ItemSearchResult,
Label, Period, Track,
};
#[derive(Serialize, Deserialize, Debug, Clone, Default)]
pub struct Album {
#[serde(rename = "id")]
pub id: Option<String>,
#[serde(rename = "title")]
pub title: Option<String>,
#[serde(rename = "subtitle")]
pub subtitle: Option<String>,
#[serde(rename = "version")]
pub version: Option<String>,
#[serde(rename = "upc")]
pub upc: Option<String>,
#[serde(rename = "url")]
pub url: Option<String>,
#[serde(rename = "product_url")]
pub product_url: Option<String>,
#[serde(rename = "relative_url")]
pub relative_url: Option<String>,
#[serde(rename = "artist")]
pub artist: Option<Box<Artist>>,
#[serde(rename = "artists")]
pub artists: Option<Vec<Box<Artist>>>,
#[serde(rename = "composer")]
pub composer: Option<Box<Artist>>,
#[serde(rename = "label")]
pub label: Option<Label>,
#[serde(rename = "genre")]
pub genre: Option<Genre>,
#[serde(rename = "genres_list")]
pub genres_list: Option<Vec<String>>,
#[serde(rename = "image")]
pub image: Option<Image>,
#[serde(rename = "duration")]
pub duration: Option<i64>,
#[serde(rename = "tracks_count")]
pub tracks_count: Option<i32>,
#[serde(rename = "media_count")]
pub media_count: Option<i32>,
#[serde(rename = "released_at")]
pub released_at: Option<i64>,
#[serde(rename = "release_date_download")]
pub release_date_download: Option<String>,
#[serde(rename = "release_date_original")]
pub release_date_original: Option<String>,
#[serde(rename = "release_date_stream")]
pub release_date_stream: Option<String>,
#[serde(rename = "created_at")]
pub created_at: Option<i64>,
#[serde(rename = "purchasable_at")]
pub purchasable_at: Option<i64>,
#[serde(rename = "streamable_at")]
pub streamable_at: Option<i64>,
#[serde(rename = "copyright")]
pub copyright: Option<String>,
#[serde(rename = "description")]
pub description: Option<String>,
#[serde(rename = "catchline")]
pub catchline: Option<String>,
#[serde(rename = "recording_information")]
pub recording_information: Option<String>,
#[serde(rename = "maximum_bit_depth")]
pub maximum_bit_depth: Option<f64>,
#[serde(rename = "maximum_channel_count")]
pub maximum_channel_count: Option<f64>,
#[serde(rename = "maximum_sampling_rate")]
pub maximum_sampling_rate: Option<f64>,
#[serde(rename = "maximum_technical_specifications")]
pub maximum_technical_specifications: Option<String>,
#[serde(rename = "hires")]
pub hires: Option<bool>,
#[serde(rename = "hires_streamable")]
pub hires_streamable: Option<bool>,
#[serde(rename = "displayable")]
pub displayable: Option<bool>,
#[serde(rename = "downloadable")]
pub downloadable: Option<bool>,
#[serde(rename = "purchasable")]
pub purchasable: Option<bool>,
#[serde(rename = "streamable")]
pub streamable: Option<bool>,
#[serde(rename = "previewable")]
pub previewable: Option<bool>,
#[serde(rename = "sampleable")]
pub sampleable: Option<bool>,
#[serde(rename = "parental_warning")]
pub parental_warning: Option<bool>,
#[serde(rename = "is_official")]
pub is_official: Option<bool>,
#[serde(rename = "product_type")]
pub product_type: Option<String>,
#[serde(rename = "release_type")]
pub release_type: Option<String>,
#[serde(rename = "popularity")]
pub popularity: Option<i32>,
#[serde(rename = "tracks")]
pub tracks: Option<ItemSearchResult<Box<Track>>>,
#[serde(rename = "albums_same_artist")]
pub albums_same_artist: Option<AlbumsSameArtist>,
#[serde(rename = "area")]
pub area: Option<Area>,
#[serde(rename = "articles")]
pub articles: Option<Vec<Article>>,
#[serde(rename = "awards")]
pub awards: Option<Vec<Award>>,
#[serde(rename = "goodies")]
pub goodies: Option<Vec<Goody>>,
#[serde(rename = "items_focus")]
pub items_focus: Option<Vec<Focus>>,
#[serde(rename = "period")]
pub period: Option<Period>,
#[serde(rename = "product_sales_factors_monthly")]
pub product_sales_factors_monthly: Option<f64>,
#[serde(rename = "product_sales_factors_weekly")]
pub product_sales_factors_weekly: Option<f64>,
#[serde(rename = "product_sales_factors_yearly")]
pub product_sales_factors_yearly: Option<f64>,
#[serde(rename = "qobuz_id")]
pub qobuz_id: Option<i32>,
#[serde(rename = "release_tags")]
pub release_tags: Option<Vec<Value>>,
#[serde(rename = "track_ids")]
pub track_ids: Option<Vec<i32>>,
}