use serde::{Deserialize, Serialize};
use crate::models::Image;
#[derive(Serialize, Deserialize, Debug, Clone, Default)]
pub struct FileUrl {
#[serde(rename = "track_id")]
pub track_id: Option<i32>,
#[serde(rename = "duration")]
pub duration: Option<i32>,
#[serde(rename = "url")]
pub url: Option<String>,
#[serde(rename = "format_id")]
pub format_id: Option<i32>,
#[serde(rename = "mime_type")]
pub mime_type: Option<String>,
#[serde(rename = "sampling_rate")]
pub sampling_rate: Option<f64>,
#[serde(rename = "bit_depth")]
pub bit_depth: Option<i32>,
#[serde(rename = "status")]
pub status: Option<String>,
#[serde(rename = "message")]
pub message: Option<String>,
#[serde(rename = "code")]
pub code: Option<String>,
}
#[derive(Serialize, Deserialize, Debug, Clone, Default)]
pub struct ReleasesList {
#[serde(rename = "has_more")]
pub has_more: Option<bool>,
#[serde(rename = "items")]
pub items: Option<Vec<Release>>,
}
#[derive(Serialize, Deserialize, Debug, Clone, Default)]
pub struct Release {
#[serde(rename = "id")]
pub id: Option<String>,
#[serde(rename = "title")]
pub title: Option<String>,
#[serde(rename = "artist")]
pub artist: Option<ReleaseArtist>,
#[serde(rename = "image")]
pub image: Option<Image>,
#[serde(rename = "upc")]
pub upc: Option<String>,
#[serde(rename = "release_date")]
pub release_date: Option<String>,
#[serde(rename = "label")]
pub label: Option<String>,
#[serde(rename = "version")]
pub version: Option<String>,
#[serde(rename = "tracks_count")]
pub tracks_count: Option<i32>,
#[serde(rename = "duration")]
pub duration: Option<i64>,
#[serde(rename = "copyright")]
pub copyright: Option<String>,
#[serde(rename = "url")]
pub url: Option<String>,
#[serde(rename = "is_hq")]
pub is_hq: Option<bool>,
#[serde(rename = "is_explicit")]
pub is_explicit: Option<bool>,
#[serde(rename = "tracks")]
pub tracks: Option<ReleaseTrackList>,
#[serde(rename = "physical_support")]
pub physical_support: Option<ReleasePhysicalSupport>,
#[serde(rename = "rights")]
pub rights: Option<ReleaseRights>,
#[serde(rename = "audio_info")]
pub audio_info: Option<ReleaseAudioInfo>,
}
#[derive(Serialize, Deserialize, Debug, Clone, Default)]
pub struct ReleaseArtist {
#[serde(rename = "id")]
pub id: Option<i32>,
#[serde(rename = "name")]
pub name: Option<String>,
#[serde(rename = "slug")]
pub slug: Option<String>,
}
#[derive(Serialize, Deserialize, Debug, Clone, Default)]
pub struct ReleaseTrackList {
#[serde(rename = "items")]
pub items: Option<Vec<ReleaseTrack>>,
#[serde(rename = "total")]
pub total: Option<i32>,
}
#[derive(Serialize, Deserialize, Debug, Clone, Default)]
pub struct ReleaseTrack {
#[serde(rename = "id")]
pub id: Option<i32>,
#[serde(rename = "title")]
pub title: Option<String>,
#[serde(rename = "duration")]
pub duration: Option<i64>,
#[serde(rename = "track_number")]
pub track_number: Option<i32>,
#[serde(rename = "media_number")]
pub media_number: Option<i32>,
}
#[derive(Serialize, Deserialize, Debug, Clone, Default)]
pub struct ReleasePhysicalSupport {
#[serde(rename = "type")]
pub type_field: Option<String>,
#[serde(rename = "format")]
pub format: Option<String>,
#[serde(rename = "description")]
pub description: Option<String>,
}
#[derive(Serialize, Deserialize, Debug, Clone, Default)]
pub struct ReleaseRights {
#[serde(rename = "can_stream")]
pub can_stream: Option<bool>,
#[serde(rename = "can_download")]
pub can_download: Option<bool>,
}
#[derive(Serialize, Deserialize, Debug, Clone, Default)]
pub struct ReleaseAudioInfo {
#[serde(rename = "bit_depth")]
pub bit_depth: Option<i32>,
#[serde(rename = "sampling_rate")]
pub sampling_rate: Option<f64>,
#[serde(rename = "format")]
pub format: Option<String>,
}