From ea77a8cf9c012fcd877d842fec85b0b5a442952c Mon Sep 17 00:00:00 2001 From: "Jakob L. Kreuze" Date: Sun, 7 Aug 2022 20:47:54 -0400 Subject: Import modifications to `mpd` crate --- vendored/mpd/src/plugin.rs | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 vendored/mpd/src/plugin.rs (limited to 'vendored/mpd/src/plugin.rs') diff --git a/vendored/mpd/src/plugin.rs b/vendored/mpd/src/plugin.rs new file mode 100644 index 0000000..c490d02 --- /dev/null +++ b/vendored/mpd/src/plugin.rs @@ -0,0 +1,45 @@ +//! The module defines decoder plugin data structures + +use crate::convert::FromIter; +use crate::error::Error; + +/// Decoder plugin +#[derive(Clone, Debug, PartialEq, RustcEncodable)] +pub struct Plugin { + /// name + pub name: String, + /// supported file suffixes (extensions) + pub suffixes: Vec, + /// supported MIME-types + pub mime_types: Vec, +} + +impl FromIter for Vec { + fn from_iter>>(iter: I) -> Result { + let mut result = Vec::new(); + let mut plugin: Option = None; + for reply in iter { + let (a, b) = reply?; + match &*a { + "plugin" => { + plugin.map(|p| result.push(p)); + + plugin = Some(Plugin { + name: b, + suffixes: Vec::new(), + mime_types: Vec::new(), + }); + } + "mime_type" => { + plugin.as_mut().map(|p| p.mime_types.push(b)); + } + "suffix" => { + plugin.as_mut().map(|p| p.suffixes.push(b)); + } + _ => unreachable!(), + } + } + plugin.map(|p| result.push(p)); + Ok(result) + } +} -- cgit v1.3