-
Notifications
You must be signed in to change notification settings - Fork 13
/
Copy pathversion.rs
52 lines (44 loc) · 1.24 KB
/
version.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
use crate::Error;
pub struct Version {
pub major: u8,
#[allow(dead_code)]
pub minor: u8,
#[allow(dead_code)]
pub revision: u8,
}
impl TryFrom<&str> for Version {
type Error = Error;
fn try_from(value: &str) -> std::result::Result<Self, Self::Error> {
let mut split = value.split('.');
let (Some(major), Some(minor), Some(revision), None) =
(split.next(), split.next(), split.next(), split.next())
else {
return Err(Error::Client(
"Cannot parse Redis server version".to_owned(),
));
};
let (Some(major), Some(minor), Some(revision)) = (
atoi::atoi(major.as_bytes()),
atoi::atoi(minor.as_bytes()),
atoi::atoi(revision.as_bytes()),
) else {
return Err(Error::Client(
"Cannot parse Redis server version".to_owned(),
));
};
Ok(Version {
major,
minor,
revision,
})
}
}
#[cfg(test)]
mod tests {
use super::Version;
#[test]
fn version() {
let version: Version = "7.0.0".try_into().unwrap();
assert_eq!((7, 0, 0), (version.major, version.minor, version.revision));
}
}