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
use std::fmt; #[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord)] pub struct Version([u16; 3]); impl Version { #[inline] pub fn new(major: u16, minor: u16, patch: u16) -> Version { Version([major, minor, patch]) } } impl From<u32> for Version { fn from(val: u32) -> Version { Version([ ((val & 0xffc00000) >> 22) as u16, ((val & 0x003ff000) >> 12) as u16, (val & 0x00000fff) as u16 ]) } } impl From<[u16; 3]> for Version { fn from(ver: [u16; 3]) -> Version { Version([ver[0], ver[1], ver[2]]) } } impl From<(u16, u16, u16)> for Version { fn from(ver: (u16, u16, u16)) -> Version { Version([ver.0, ver.1, ver.2]) } } impl From<Version> for u32 { fn from(ver: Version) -> u32 { (ver.0[0] as u32) << 22 | (ver.0[1] as u32) << 12 | (ver.0[2] as u32) } } impl fmt::Display for Version { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { write!(f, "{}.{}.{}", self.0[0], self.0[1], self.0[2]) } }