async_mpd/protocol/
mod.rs

1use chrono::{DateTime, Utc};
2use serde::{Deserialize, Serialize};
3use std::time::Duration;
4
5#[derive(Deserialize, Serialize, Debug, Default)]
6/// Playlist on the server
7pub struct Playlist {
8    pub path: String,
9    pub last_modified: Option<DateTime<Utc>>,
10}
11
12#[derive(Deserialize, Serialize, Debug, Default)]
13/// Directory on the server
14pub struct Directory {
15    pub path: String,
16    pub last_modified: Option<DateTime<Utc>>,
17}
18
19#[derive(Deserialize, Serialize, Debug, PartialEq)]
20/// Mpd status response
21pub struct Status {
22    /// Name of current partition
23    pub partition: Option<String>,
24    /// Volume (0 - 100)
25    pub volume: Option<u8>,
26    pub repeat: bool,
27    pub random: bool,
28    /// 0, 1 or Oneshot
29    pub single: String,
30    pub consume: bool,
31    /// Playlist version number
32    pub playlist: u32,
33    pub playlistlength: u32,
34    pub song: Option<u32>,
35    pub songid: Option<u32>,
36    pub nextsong: Option<u32>,
37    pub nextsongid: Option<u32>,
38    // TODO: mpd returns this as "291:336" for 291.336 seconds.
39    // It’s almost usually just a few ms ahead of elapsed,
40    // so I’m not sure if we need this at all.
41    pub time: Option<String>,
42    #[serde(default)]
43    pub elapsed: Option<Duration>,
44    #[serde(default)]
45    pub duration: Option<Duration>,
46    pub mixrampdb: f32,
47    /// mixrampdelay in seconds
48    pub mixrampdelay: Option<u32>,
49    /// Player status
50    pub state: State,
51    /// Instantaneous bitrate in kbps
52    pub bitrate: Option<u16>,
53    /// crossfade in seconds
54    pub xfade: Option<u32>,
55    pub audio: Option<String>,
56    pub updating_db: Option<u32>,
57    pub error: Option<String>,
58}
59
60#[derive(Deserialize, Serialize, Debug, PartialEq)]
61/// Player status
62pub enum State {
63    Play,
64    Stop,
65    Pause,
66}
67
68impl Default for State {
69    fn default() -> Self {
70        State::Stop
71    }
72}
73
74#[derive(Deserialize, Serialize, Clone, Debug, Default)]
75/// Mpd database statistics
76pub struct Stats {
77    pub uptime: Duration,
78    pub playtime: Duration,
79    pub artists: u32,
80    pub albums: u32,
81    pub songs: u32,
82    pub db_playtime: Duration,
83    pub db_update: i32,
84}
85
86#[derive(Deserialize, Serialize, Clone, Debug, Default)]
87pub struct DatabaseVersion(pub u32);
88
89#[derive(Deserialize, Serialize, Clone, Debug, Default)]
90/// Track
91pub struct Track {
92    pub file: String,
93    pub artist_sort: Option<String>,
94    pub album_artist: Option<String>,
95    pub album_sort: Option<String>,
96    pub album_artist_sort: Option<String>,
97    pub performer: Vec<String>,
98    pub genre: Option<String>,
99    pub title: Option<String>,
100    pub track: Option<u32>,
101    pub album: Option<String>,
102    pub artist: Option<String>,
103    pub pos: Option<u32>,
104    pub id: Option<u32>,
105    pub last_modified: Option<DateTime<Utc>>,
106    pub original_date: Option<String>,
107    pub time: Option<String>,
108    pub format: Option<String>,
109    pub duration: Duration,
110    pub label: Option<String>,
111    pub date: Option<String>,
112    pub disc: Option<u32>,
113    pub musicbraiz_trackid: Option<String>,
114    pub musicbrainz_albumid: Option<String>,
115    pub musicbrainz_albumartistid: Option<String>,
116    pub musicbrainz_artistid: Option<String>,
117    pub musicbraiz_releasetrackid: Option<String>,
118    pub musicbraiz_workid: Option<String>,
119    pub composer: Vec<String>,
120}
121
122#[derive(Copy, Clone, Debug)]
123/// Track tags
124pub enum Tag {
125    Artist,
126    ArtistSort,
127    Album,
128    AlbumSort,
129    AlbumArtist,
130    AlbumSortOrder,
131    Title,
132    Track,
133    Name,
134    Genre,
135    Date,
136    Composer,
137    Performer,
138    Conductor,
139    Work,
140    Grouping,
141    Comment,
142    Disc,
143    Label,
144    MusicbrainzArtistId,
145    MusicbrainzAlbumId,
146    MusicbrainzAlbumArtistId,
147    MusicbrainzTrackId,
148    MusicbrainzReleaseTrackId,
149    MusicbrainzWorkId,
150    Any,
151}
152
153#[derive(Deserialize, Serialize, Debug)]
154/// Subsystem
155pub enum Subsystem {
156    Database,
157    Player,
158    Mixer,
159    Options,
160    Update,
161    StoredPlaylist,
162    Playlist,
163    Output,
164    Partitions,
165    Sticker,
166    Subscription,
167    Message,
168
169    Other,
170}