use crate::{ClientError, 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(ClientError::CannotParseRedisServerVersion));
};
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(ClientError::CannotParseRedisServerVersion));
};
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));
}
}