tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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 }