summaryrefslogtreecommitdiff
path: root/vendored/mpd/src/version.rs
diff options
context:
space:
mode:
Diffstat (limited to 'vendored/mpd/src/version.rs')
-rw-r--r--vendored/mpd/src/version.rs25
1 files changed, 25 insertions, 0 deletions
diff --git a/vendored/mpd/src/version.rs b/vendored/mpd/src/version.rs
new file mode 100644
index 0000000..7a62d6a
--- /dev/null
+++ b/vendored/mpd/src/version.rs
@@ -0,0 +1,25 @@
+//! This module defines MPD version type and parsing code
+
+
+use crate::error::ParseError;
+use std::str::FromStr;
+
+// Version {{{
+/// MPD version
+#[derive(Debug, Copy, Clone, PartialEq, PartialOrd, RustcEncodable)]
+pub struct Version(pub u16, pub u16, pub u16);
+
+impl FromStr for Version {
+ type Err = ParseError;
+ fn from_str(s: &str) -> Result<Version, ParseError> {
+ let mut splits = s.splitn(3, '.').map(FromStr::from_str);
+ match (splits.next(), splits.next(), splits.next()) {
+ (Some(Ok(a)), Some(Ok(b)), Some(Ok(c))) => Ok(Version(a, b, c)),
+ (Some(Err(e)), _, _) |
+ (_, Some(Err(e)), _) |
+ (_, _, Some(Err(e))) => Err(ParseError::BadInteger(e)),
+ _ => Err(ParseError::BadVersion),
+ }
+ }
+}
+// }}}