use crate::models;
use serde::{Deserialize, Serialize};
#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)]
#[serde(default)]
pub struct TracksAttributes {
#[serde(rename = "accessType", skip_serializing_if = "Option::is_none")]
pub access_type: Option<AccessType>,
#[serde(rename = "availability", skip_serializing_if = "Option::is_none")]
pub availability: Option<Vec<Availability>>,
#[serde(rename = "bpm", skip_serializing_if = "Option::is_none")]
pub bpm: Option<f32>,
#[serde(rename = "copyright", skip_serializing_if = "Option::is_none")]
pub copyright: Option<Box<models::Copyright>>,
#[serde(rename = "createdAt", skip_serializing_if = "Option::is_none")]
pub created_at: Option<String>,
#[serde(rename = "duration")]
pub duration: String,
#[serde(rename = "explicit")]
pub explicit: bool,
#[serde(rename = "externalLinks", skip_serializing_if = "Option::is_none")]
pub external_links: Option<Vec<models::ExternalLink>>,
#[serde(rename = "isrc")]
pub isrc: String,
#[serde(rename = "key")]
pub key: Key,
#[serde(rename = "keyScale")]
pub key_scale: KeyScale,
#[serde(rename = "mediaTags")]
pub media_tags: Vec<String>,
#[serde(rename = "popularity")]
pub popularity: f64,
#[serde(rename = "spotlighted", skip_serializing_if = "Option::is_none")]
pub spotlighted: Option<bool>,
#[serde(rename = "title")]
pub title: String,
#[serde(rename = "toneTags", skip_serializing_if = "Option::is_none")]
pub tone_tags: Option<Vec<String>>,
#[serde(rename = "version", skip_serializing_if = "Option::is_none")]
pub version: Option<String>,
}
impl TracksAttributes {
pub fn new(
duration: String,
explicit: bool,
isrc: String,
key: Key,
key_scale: KeyScale,
media_tags: Vec<String>,
popularity: f64,
title: String,
) -> TracksAttributes {
TracksAttributes {
access_type: None,
availability: None,
bpm: None,
copyright: None,
created_at: None,
duration,
explicit,
external_links: None,
isrc,
key,
key_scale,
media_tags,
popularity,
spotlighted: None,
title,
tone_tags: None,
version: None,
}
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
pub enum AccessType {
#[serde(rename = "PUBLIC")]
Public,
#[serde(rename = "UNLISTED")]
Unlisted,
#[serde(rename = "PRIVATE")]
Private,
}
impl Default for AccessType {
fn default() -> AccessType {
Self::Public
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
pub enum Availability {
#[serde(rename = "STREAM")]
Stream,
#[serde(rename = "DJ")]
Dj,
#[serde(rename = "STEM")]
Stem,
}
impl Default for Availability {
fn default() -> Availability {
Self::Stream
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
pub enum Key {
#[serde(rename = "UNKNOWN")]
Unknown,
#[serde(rename = "C")]
C,
#[serde(rename = "CSharp")]
CSharp,
#[serde(rename = "D")]
D,
#[serde(rename = "Eb")]
Eb,
#[serde(rename = "E")]
E,
#[serde(rename = "F")]
F,
#[serde(rename = "FSharp")]
FSharp,
#[serde(rename = "G")]
G,
#[serde(rename = "Ab")]
Ab,
#[serde(rename = "A")]
A,
#[serde(rename = "Bb")]
Bb,
#[serde(rename = "B")]
B,
}
impl Default for Key {
fn default() -> Key {
Self::Unknown
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
pub enum KeyScale {
#[serde(rename = "UNKNOWN")]
Unknown,
#[serde(rename = "MAJOR")]
Major,
#[serde(rename = "MINOR")]
Minor,
#[serde(rename = "AEOLIAN")]
Aeolian,
#[serde(rename = "BLUES")]
Blues,
#[serde(rename = "DORIAN")]
Dorian,
#[serde(rename = "HARMONIC_MINOR")]
HarmonicMinor,
#[serde(rename = "LOCRIAN")]
Locrian,
#[serde(rename = "LYDIAN")]
Lydian,
#[serde(rename = "MIXOLYDIAN")]
Mixolydian,
#[serde(rename = "PENTATONIC_MAJOR")]
PentatonicMajor,
#[serde(rename = "PHRYGIAN")]
Phrygian,
#[serde(rename = "MELODIC_MINOR")]
MelodicMinor,
#[serde(rename = "PENTATONIC_MINOR")]
PentatonicMinor,
}
impl Default for KeyScale {
fn default() -> KeyScale {
Self::Unknown
}
}