spotifyio/crates/model/src/enums/misc.rs

109 lines
3 KiB
Rust

use serde::{Deserialize, Serialize};
use strum::IntoStaticStr;
use time::OffsetDateTime;
use super::Country;
/// Disallows object: `interrupting_playback`, `pausing`, `resuming`, `seeking`,
/// `skipping_next`, `skipping_prev`, `toggling_repeat_context`,
/// `toggling_shuffle`, `toggling_repeat_track`, `transferring_playback`.
#[derive(Clone, Serialize, Deserialize, Copy, PartialEq, Eq, Debug, Hash, IntoStaticStr)]
#[serde(rename_all = "snake_case")]
#[strum(serialize_all = "snake_case")]
pub enum DisallowKey {
InterruptingPlayback,
Pausing,
Resuming,
Seeking,
SkippingNext,
SkippingPrev,
TogglingRepeatContext,
TogglingShuffle,
TogglingRepeatTrack,
TransferringPlayback,
}
/// Time range: `long-term`, `medium-term`, `short-term`.
#[derive(Clone, Serialize, Deserialize, Copy, PartialEq, Eq, Debug, IntoStaticStr)]
#[serde(rename_all = "snake_case")]
#[strum(serialize_all = "snake_case")]
pub enum TimeRange {
LongTerm,
MediumTerm,
ShortTerm,
}
/// Repeat state: `track`, `context` or `off`.
#[derive(Clone, Debug, Copy, Serialize, Deserialize, PartialEq, Eq, IntoStaticStr)]
#[serde(rename_all = "snake_case")]
#[strum(serialize_all = "snake_case")]
pub enum RepeatState {
Off,
Track,
Context,
}
/// Type for `include_external`: `audio`.
#[derive(Clone, Serialize, Deserialize, Copy, PartialEq, Eq, Debug, IntoStaticStr)]
#[serde(rename_all = "snake_case")]
#[strum(serialize_all = "snake_case")]
pub enum IncludeExternal {
Audio,
}
/// Date precision: `year`, `month`, `day`.
#[derive(Clone, Serialize, Deserialize, Copy, PartialEq, Eq, Debug, IntoStaticStr)]
#[serde(rename_all = "snake_case")]
#[strum(serialize_all = "snake_case")]
pub enum DatePrecision {
Year,
Month,
Day,
}
/// The reason for the restriction: `market`, `product`, `explicit`
#[derive(Clone, Serialize, Deserialize, Copy, PartialEq, Eq, Debug, IntoStaticStr)]
#[serde(rename_all = "snake_case")]
#[strum(serialize_all = "snake_case")]
pub enum RestrictionReason {
Market,
Product,
Explicit,
}
/// Indicates the modality (major or minor) of a track.
///
/// This field will contain a 0 for `minor`, a 1 for `major` or a -1 for `no
/// result`
#[derive(Clone, Serialize, Deserialize, Copy, PartialEq, Eq, Debug, IntoStaticStr)]
pub enum Modality {
Minor = 0,
Major = 1,
NoResult = -1,
}
/// Limit the response to a particular market
///
/// `FromToken` is the same thing as setting the market parameter to the user's
/// country.
#[derive(Clone, Copy, Debug, Serialize, Deserialize, PartialEq, Eq)]
pub enum Market {
Country(Country),
FromToken,
}
impl From<Market> for &'static str {
fn from(market: Market) -> Self {
match market {
Market::Country(country) => country.into(),
Market::FromToken => "from_token",
}
}
}
/// Time limits in miliseconds (unix timestamps)
#[derive(Clone, Debug, Serialize, Deserialize, Copy, PartialEq, Eq)]
pub enum TimeLimits {
Before(OffsetDateTime),
After(OffsetDateTime),
}