1use chrono::{DateTime, Utc};
2use serde::{Deserialize, Serialize};
3use strum::IntoStaticStr;
4
5use super::Country;
6
7#[derive(Clone, Serialize, Deserialize, Copy, PartialEq, Eq, Debug, Hash, IntoStaticStr)]
11#[serde(rename_all = "snake_case")]
12#[strum(serialize_all = "snake_case")]
13pub enum DisallowKey {
14 InterruptingPlayback,
15 Pausing,
16 Resuming,
17 Seeking,
18 SkippingNext,
19 SkippingPrev,
20 TogglingRepeatContext,
21 TogglingShuffle,
22 TogglingRepeatTrack,
23 TransferringPlayback,
24}
25
26#[derive(Clone, Serialize, Deserialize, Copy, PartialEq, Eq, Debug, IntoStaticStr)]
28#[serde(rename_all = "snake_case")]
29#[strum(serialize_all = "snake_case")]
30pub enum TimeRange {
31 LongTerm,
32 MediumTerm,
33 ShortTerm,
34}
35
36#[derive(Clone, Debug, Copy, Serialize, Deserialize, PartialEq, Eq, IntoStaticStr)]
38#[serde(rename_all = "snake_case")]
39#[strum(serialize_all = "snake_case")]
40pub enum RepeatState {
41 Off,
42 Track,
43 Context,
44}
45
46#[derive(Clone, Serialize, Deserialize, Copy, PartialEq, Eq, Debug, IntoStaticStr)]
48#[serde(rename_all = "snake_case")]
49#[strum(serialize_all = "snake_case")]
50pub enum IncludeExternal {
51 Audio,
52}
53
54#[derive(Clone, Serialize, Deserialize, Copy, PartialEq, Eq, Debug, IntoStaticStr)]
56#[serde(rename_all = "snake_case")]
57#[strum(serialize_all = "snake_case")]
58pub enum DatePrecision {
59 Year,
60 Month,
61 Day,
62}
63
64#[derive(Clone, Serialize, Deserialize, Copy, PartialEq, Eq, Debug, IntoStaticStr)]
66#[serde(rename_all = "snake_case")]
67#[strum(serialize_all = "snake_case")]
68pub enum RestrictionReason {
69 Market,
70 Product,
71 Explicit,
72}
73
74#[derive(Clone, Serialize, Deserialize, Copy, PartialEq, Eq, Debug, IntoStaticStr)]
79pub enum Modality {
80 Minor = 0,
81 Major = 1,
82 NoResult = -1,
83}
84
85#[derive(Clone, Copy, Debug, Serialize, Deserialize, PartialEq, Eq)]
90pub enum Market {
91 Country(Country),
92 FromToken,
93}
94
95impl From<Market> for &'static str {
96 fn from(market: Market) -> Self {
97 match market {
98 Market::Country(country) => country.into(),
99 Market::FromToken => "from_token",
100 }
101 }
102}
103
104#[derive(Clone, Debug, Serialize, Deserialize, Copy, PartialEq, Eq)]
106pub enum TimeLimits {
107 Before(DateTime<Utc>),
108 After(DateTime<Utc>),
109}