datetime_options.rs (4753B)
1 // This file is part of ICU4X. For terms of use, please see the file 2 // called LICENSE at the top level of the ICU4X source tree 3 // (online at: https://github.com/unicode-org/icu4x/blob/main/LICENSE ). 4 5 #[diplomat::bridge] 6 #[diplomat::abi_rename = "icu4x_{0}_mv1"] 7 #[diplomat::attr(auto, namespace = "icu4x")] 8 pub mod ffi { 9 #[diplomat::enum_convert(icu_datetime::options::Length, needs_wildcard)] 10 #[diplomat::rust_link(icu::datetime::options::Length, Enum)] 11 pub enum DateTimeLength { 12 Long, 13 Medium, 14 Short, 15 } 16 17 #[diplomat::enum_convert(icu_datetime::options::Alignment, needs_wildcard)] 18 #[diplomat::rust_link(icu::datetime::options::Alignment, Enum)] 19 pub enum DateTimeAlignment { 20 Auto, 21 Column, 22 } 23 24 #[diplomat::enum_convert(icu_datetime::options::YearStyle, needs_wildcard)] 25 #[diplomat::rust_link(icu::datetime::options::YearStyle, Enum)] 26 pub enum YearStyle { 27 Auto, 28 Full, 29 WithEra, 30 } 31 32 #[diplomat::rust_link(icu::datetime::options::TimePrecision, Enum)] 33 #[diplomat::rust_link(icu::datetime::options::SubsecondDigits, Enum)] 34 pub enum TimePrecision { 35 Hour, 36 Minute, 37 MinuteOptional, 38 Second, 39 Subsecond1, 40 Subsecond2, 41 Subsecond3, 42 Subsecond4, 43 Subsecond5, 44 Subsecond6, 45 Subsecond7, 46 Subsecond8, 47 Subsecond9, 48 } 49 50 impl TimePrecision { 51 #[diplomat::rust_link(icu::datetime::options::SubsecondDigits::try_from_int, FnInEnum)] 52 pub fn from_subsecond_digits(digits: u8) -> Option<Self> { 53 icu_datetime::options::SubsecondDigits::try_from_int(digits) 54 .map(icu_datetime::options::TimePrecision::Subsecond) 55 .map(Into::into) 56 } 57 } 58 } 59 60 impl From<ffi::TimePrecision> for icu_datetime::options::TimePrecision { 61 fn from(time_precision: ffi::TimePrecision) -> Self { 62 use icu_datetime::options::SubsecondDigits; 63 use icu_datetime::options::TimePrecision; 64 match time_precision { 65 ffi::TimePrecision::Hour => TimePrecision::Hour, 66 ffi::TimePrecision::Minute => TimePrecision::Minute, 67 ffi::TimePrecision::MinuteOptional => TimePrecision::MinuteOptional, 68 ffi::TimePrecision::Second => TimePrecision::Second, 69 ffi::TimePrecision::Subsecond1 => TimePrecision::Subsecond(SubsecondDigits::S1), 70 ffi::TimePrecision::Subsecond2 => TimePrecision::Subsecond(SubsecondDigits::S2), 71 ffi::TimePrecision::Subsecond3 => TimePrecision::Subsecond(SubsecondDigits::S3), 72 ffi::TimePrecision::Subsecond4 => TimePrecision::Subsecond(SubsecondDigits::S4), 73 ffi::TimePrecision::Subsecond5 => TimePrecision::Subsecond(SubsecondDigits::S5), 74 ffi::TimePrecision::Subsecond6 => TimePrecision::Subsecond(SubsecondDigits::S6), 75 ffi::TimePrecision::Subsecond7 => TimePrecision::Subsecond(SubsecondDigits::S7), 76 ffi::TimePrecision::Subsecond8 => TimePrecision::Subsecond(SubsecondDigits::S8), 77 ffi::TimePrecision::Subsecond9 => TimePrecision::Subsecond(SubsecondDigits::S9), 78 } 79 } 80 } 81 82 impl From<icu_datetime::options::TimePrecision> for ffi::TimePrecision { 83 fn from(time_precision: icu_datetime::options::TimePrecision) -> Self { 84 use icu_datetime::options::SubsecondDigits; 85 use icu_datetime::options::TimePrecision; 86 match time_precision { 87 TimePrecision::Hour => ffi::TimePrecision::Hour, 88 TimePrecision::Minute => ffi::TimePrecision::Minute, 89 TimePrecision::MinuteOptional => ffi::TimePrecision::MinuteOptional, 90 TimePrecision::Second => ffi::TimePrecision::Second, 91 TimePrecision::Subsecond(SubsecondDigits::S1) => ffi::TimePrecision::Subsecond1, 92 TimePrecision::Subsecond(SubsecondDigits::S2) => ffi::TimePrecision::Subsecond2, 93 TimePrecision::Subsecond(SubsecondDigits::S3) => ffi::TimePrecision::Subsecond3, 94 TimePrecision::Subsecond(SubsecondDigits::S4) => ffi::TimePrecision::Subsecond4, 95 TimePrecision::Subsecond(SubsecondDigits::S5) => ffi::TimePrecision::Subsecond5, 96 TimePrecision::Subsecond(SubsecondDigits::S6) => ffi::TimePrecision::Subsecond6, 97 TimePrecision::Subsecond(SubsecondDigits::S7) => ffi::TimePrecision::Subsecond7, 98 TimePrecision::Subsecond(SubsecondDigits::S8) => ffi::TimePrecision::Subsecond8, 99 TimePrecision::Subsecond(SubsecondDigits::S9) => ffi::TimePrecision::Subsecond9, 100 _ => { 101 debug_assert!(false, "cross-crate exhaustive match"); 102 ffi::TimePrecision::Second 103 } 104 } 105 } 106 }