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
#[macro_use] extern crate thiserror; mod codename; mod version; pub use self::{codename::*, version::*}; use std::convert::TryFrom; impl TryFrom<Version> for Codename { type Error = (); fn try_from(version: Version) -> Result<Self, Self::Error> { Ok(match (version.major, version.minor) { (18, 4) => Codename::Bionic, (18, 10) => Codename::Cosmic, (19, 4) => Codename::Disco, (19, 10) => Codename::Eoan, (20, 4) => Codename::Focal, _ => return Err(()), }) } } impl From<Codename> for Version { fn from(codename: Codename) -> Version { let (major, minor) = match codename { Codename::Bionic => (18, 4), Codename::Cosmic => (18, 10), Codename::Disco => (19, 4), Codename::Eoan => (19, 10), Codename::Focal => (20, 4), }; Version { major, minor, patch: 0 } } }