diff options
| author | Jakob L. Kreuze <zerodaysfordays@sdf.org> | 2022-08-07 20:47:54 -0400 |
|---|---|---|
| committer | Jakob L. Kreuze <zerodaysfordays@sdf.org> | 2022-08-07 20:47:54 -0400 |
| commit | ea77a8cf9c012fcd877d842fec85b0b5a442952c (patch) | |
| tree | 7f209c030b97a957497f152d161a9d7035311132 /vendored/mpd/src/playlist.rs | |
| parent | 0de7e9ac43f88aae3750ecfe25b5454fdd1ad015 (diff) | |
Diffstat (limited to 'vendored/mpd/src/playlist.rs')
| -rw-r--r-- | vendored/mpd/src/playlist.rs | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/vendored/mpd/src/playlist.rs b/vendored/mpd/src/playlist.rs new file mode 100644 index 0000000..3d246c9 --- /dev/null +++ b/vendored/mpd/src/playlist.rs @@ -0,0 +1,33 @@ +//! The module defines playlist data structures + +use crate::convert::FromMap; +use crate::error::{Error, ProtoError, ParseError}; + +use std::collections::BTreeMap; +use std::convert::TryFrom; +use std::time::Duration; + +/// Playlist +#[derive(Clone, Debug, PartialEq)] +pub struct Playlist { + /// name + pub name: String, + /// last modified + pub last_mod: Duration, +} + +impl FromMap for Playlist { + fn from_map(map: BTreeMap<String, String>) -> Result<Playlist, Error> { + Ok(Playlist { + name: map.get("playlist").map(|v| v.to_owned()).ok_or(Error::Proto(ProtoError::NoField("playlist")))?, + last_mod: map.get("Last-Modified") + .ok_or(Error::Proto(ProtoError::NoField("Last-Modified"))) + .and_then(|v| { + let parsed: time::Date = time::parse(&*v, "%Y-%m-%dT%H:%M:%SZ") + .map_err(ParseError::BadTime)?; + Ok(std::time::Duration::try_from(parsed - time::date!(1970-01-01)) + .map_err(ParseError::BadTimeConversion)?) + })? + }) + } +} |