prawn 0.0.3

Rust Client for the Tidal API providing comprehensive API coverag, and easy OAuth management
Documentation
/*
 * TIDAL API
 *
 * The TIDAL API is a [JSON:API](https://jsonapi.org/)–compliant web API that exposes TIDAL’s music, metadata, and user-related functionality through a consistent, resource-oriented design. More information and API management are available at [developer.tidal.com](developer.tidal.com)
 *
 * The version of the OpenAPI document: 1.0.36
 *
 * Generated by: https://openapi-generator.tech
 */

use crate::models;
use serde::{Deserialize, Serialize};

#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)]
#[serde(default)]
pub struct TracksAttributes {
    /// Access type
    #[serde(rename = "accessType", skip_serializing_if = "Option::is_none")]
    pub access_type: Option<AccessType>,
    /// Available usage for this track
    #[serde(rename = "availability", skip_serializing_if = "Option::is_none")]
    pub availability: Option<Vec<Availability>>,
    /// Beats per minute
    #[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>>,
    /// Datetime of track creation (ISO 8601)
    #[serde(rename = "createdAt", skip_serializing_if = "Option::is_none")]
    pub created_at: Option<String>,
    /// Duration (ISO 8601)
    #[serde(rename = "duration")]
    pub duration: String,
    /// Explicit content
    #[serde(rename = "explicit")]
    pub explicit: bool,
    /// Track links external to TIDAL API
    #[serde(rename = "externalLinks", skip_serializing_if = "Option::is_none")]
    pub external_links: Option<Vec<models::ExternalLink>>,
    /// International Standard Recording Code (ISRC)
    #[serde(rename = "isrc")]
    pub isrc: String,
    /// Key
    #[serde(rename = "key")]
    pub key: Key,
    /// The scale of the key
    #[serde(rename = "keyScale")]
    pub key_scale: KeyScale,
    #[serde(rename = "mediaTags")]
    pub media_tags: Vec<String>,
    /// Popularity (0.0 - 1.0)
    #[serde(rename = "popularity")]
    pub popularity: f64,
    /// Is the track spotlighted?
    #[serde(rename = "spotlighted", skip_serializing_if = "Option::is_none")]
    pub spotlighted: Option<bool>,
    /// Track title
    #[serde(rename = "title")]
    pub title: String,
    #[serde(rename = "toneTags", skip_serializing_if = "Option::is_none")]
    pub tone_tags: Option<Vec<String>>,
    /// Track version, complements title
    #[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,
        }
    }
}
/// Access type
#[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
    }
}
/// Available usage for this track
#[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
    }
}
/// Key
#[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
    }
}
/// The scale of the key
#[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
    }
}