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 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
// Copyright 2017 The UNIC Project Developers. // // See the COPYRIGHT file at the top-level directory of this distribution. // // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your // option. This file may not be copied, modified, or distributed // except according to those terms. //! *Version* data types. use core::fmt; /* TODO(behnam) #[cfg(feature = "unstable")] use core::char; */ /// Represents a *Unicode Version* type. /// /// UNIC's *Unicode Version* type is used for Unicode datasets and specifications, including The /// Unicode Standard (TUS), Unicode Character Database (UCD), Common Local Data Repository (CLDR), /// IDNA, Emoji, etc. /// /// TODO: *Unicode Version* is guaranteed to have three integer fields between 0 and 255. We are /// going to switch over to `u8` after Unicode 11.0.0 release. /// /// Refs: /// - <https://www.unicode.org/versions/> /// - <https://www.unicode.org/L2/L2017/17222.htm#152-C3> #[derive(Clone, Copy, Eq, PartialEq, Ord, PartialOrd, Debug, Hash, Default)] pub struct UnicodeVersion { /// Major version. pub major: u16, /// Minor version. pub minor: u16, /// Micro (or Update) version. pub micro: u16, } impl fmt::Display for UnicodeVersion { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { write!(f, "{}.{}.{}", self.major, self.minor, self.micro) } } /* TODO(behnam): Fails with "ambiguous associated type" #[cfg(feature = "unstable")] /// Convert from Rust's internal Unicode Version. impl From<char::UnicodeVersion> for UnicodeVersion { fn from(value: char::UnicodeVersion) -> UnicodeVersion { UnicodeVersion { major: value.major as u16, minor: value.minor as u16, micro: value.micro as u16, } } } */ #[cfg(test)] mod tests { /* TODO(behnam) #[cfg(feature = "unstable")] #[test] fn test_against_rust_internal() { use core::char; use super::UnicodeVersion; let core: UnicodeVersion = char::UNICODE_VERSION.into(); assert!(core.major >= 10); } */ }