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/version.rs | |
| parent | 0de7e9ac43f88aae3750ecfe25b5454fdd1ad015 (diff) | |
Diffstat (limited to 'vendored/mpd/src/version.rs')
| -rw-r--r-- | vendored/mpd/src/version.rs | 25 |
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), + } + } +} +// }}} |