tor-browser

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

time_formatter.rs (7133B)


      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 // @generated by tools/make/codegen/src/capi_datetime.rs
      6 
      7 #[rustfmt::skip]
      8 #[diplomat::bridge]
      9 #[diplomat::abi_rename = "icu4x_{0}_mv1"]
     10 #[diplomat::attr(auto, namespace = "icu4x")]
     11 pub mod ffi {
     12    use alloc::boxed::Box;
     13    use writeable::Writeable;
     14 
     15    #[allow(unused_imports)]
     16    use crate::datetime_helpers::map_or_default;
     17 
     18    #[allow(unused_imports)]
     19    use crate::unstable::{
     20        date::ffi::{Date, IsoDate},
     21        datetime::ffi::DateTime,
     22        datetime_options::ffi::{DateTimeAlignment, DateTimeLength, TimePrecision, YearStyle},
     23        errors::ffi::DateTimeFormatterLoadError,
     24        errors::ffi::DateTimeMismatchedCalendarError,
     25        locale_core::ffi::Locale,
     26        time::ffi::Time,
     27    };
     28 
     29    #[cfg(feature = "buffer_provider")]
     30    use crate::unstable::provider::ffi::DataProvider;
     31 
     32    #[diplomat::opaque]
     33    #[diplomat::rust_link(icu::datetime::NoCalendarFormatter, Typedef)]
     34    pub struct TimeFormatter(
     35        pub  icu_datetime::FixedCalendarDateTimeFormatter<
     36            (),
     37            icu_datetime::fieldsets::enums::TimeFieldSet,
     38        >,
     39    );
     40 
     41    impl TimeFormatter {
     42        #[diplomat::attr(supports = fallible_constructors, constructor)]
     43        #[diplomat::rust_link(icu::datetime::NoCalendarFormatter::try_new, FnInTypedef)]
     44        #[diplomat::rust_link(icu::datetime::fieldsets::T, Struct)]
     45        #[diplomat::rust_link(icu::datetime::fieldsets::T::hm, FnInStruct, hidden)]
     46        #[diplomat::rust_link(icu::datetime::fieldsets::T::hms, FnInStruct, hidden)]
     47        #[diplomat::rust_link(icu::datetime::fieldsets::T::hmss, FnInStruct, hidden)]
     48        #[diplomat::rust_link(icu::datetime::fieldsets::T::with_time_precision, FnInStruct, compact)]
     49        #[diplomat::rust_link(icu::datetime::fieldsets::T::with_alignment, FnInStruct, compact)]
     50        #[diplomat::rust_link(icu::datetime::fieldsets::T::for_length, FnInStruct, compact)]
     51        #[diplomat::rust_link(icu::datetime::fieldsets::T::with_length, FnInStruct, hidden)]
     52        #[diplomat::rust_link(icu::datetime::fieldsets::T::short, FnInStruct, hidden)]
     53        #[diplomat::rust_link(icu::datetime::fieldsets::T::medium, FnInStruct, hidden)]
     54        #[diplomat::rust_link(icu::datetime::fieldsets::T::long, FnInStruct, hidden)]
     55        #[diplomat::rust_link(icu::datetime::fieldsets::T::with_time, FnInStruct, hidden)]
     56        #[diplomat::rust_link(icu::datetime::fieldsets::T::with_time_hm, FnInStruct, hidden)]
     57        #[diplomat::rust_link(icu::datetime::fieldsets::T::with_time_hms, FnInStruct, hidden)]
     58        #[diplomat::rust_link(icu::datetime::fieldsets::T::with_time_hmss, FnInStruct, hidden)]
     59        #[diplomat::rust_link(icu::datetime::fieldsets::T::with_zone, FnInStruct, hidden)] // functionality is in the zoned formatter but rustlink is here
     60        #[diplomat::demo(default_constructor)]
     61        #[cfg(feature = "compiled_data")]
     62        pub fn create(
     63            locale: &Locale,
     64            length: Option<DateTimeLength>,
     65            time_precision: Option<TimePrecision>,
     66            alignment: Option<DateTimeAlignment>,
     67        ) -> Result<Box<Self>, DateTimeFormatterLoadError> {
     68            let prefs = (&locale.0).into();
     69            let mut options = icu_datetime::fieldsets::T::for_length(map_or_default(length));
     70            options.time_precision = time_precision.map(Into::into);
     71            options.alignment = alignment.map(Into::into);
     72            Ok(Box::new(Self(
     73                icu_datetime
     74                    ::FixedCalendarDateTimeFormatter
     75                    ::try_new(
     76                        prefs,
     77                        options
     78                    )?
     79                .cast_into_fset(),
     80            )))
     81        }
     82        
     83        #[diplomat::attr(all(supports = fallible_constructors, supports = named_constructors), named_constructor = "with_provider")]
     84        #[diplomat::rust_link(icu::datetime::NoCalendarFormatter::try_new, FnInTypedef)]
     85        #[diplomat::rust_link(icu::datetime::fieldsets::T, Struct)]
     86        #[diplomat::rust_link(icu::datetime::fieldsets::T::hm, FnInStruct, hidden)]
     87        #[diplomat::rust_link(icu::datetime::fieldsets::T::hms, FnInStruct, hidden)]
     88        #[diplomat::rust_link(icu::datetime::fieldsets::T::hmss, FnInStruct, hidden)]
     89        #[diplomat::rust_link(icu::datetime::fieldsets::T::with_time_precision, FnInStruct, compact)]
     90        #[diplomat::rust_link(icu::datetime::fieldsets::T::with_alignment, FnInStruct, compact)]
     91        #[diplomat::rust_link(icu::datetime::fieldsets::T::for_length, FnInStruct, compact)]
     92        #[diplomat::rust_link(icu::datetime::fieldsets::T::with_length, FnInStruct, hidden)]
     93        #[diplomat::rust_link(icu::datetime::fieldsets::T::short, FnInStruct, hidden)]
     94        #[diplomat::rust_link(icu::datetime::fieldsets::T::medium, FnInStruct, hidden)]
     95        #[diplomat::rust_link(icu::datetime::fieldsets::T::long, FnInStruct, hidden)]
     96        #[diplomat::rust_link(icu::datetime::fieldsets::T::with_time, FnInStruct, hidden)]
     97        #[diplomat::rust_link(icu::datetime::fieldsets::T::with_time_hm, FnInStruct, hidden)]
     98        #[diplomat::rust_link(icu::datetime::fieldsets::T::with_time_hms, FnInStruct, hidden)]
     99        #[diplomat::rust_link(icu::datetime::fieldsets::T::with_time_hmss, FnInStruct, hidden)]
    100        #[diplomat::rust_link(icu::datetime::fieldsets::T::with_zone, FnInStruct, hidden)] // functionality is in the zoned formatter but rustlink is here
    101        #[cfg(feature = "buffer_provider")]
    102        pub fn create_with_provider(
    103            provider: &DataProvider,
    104            locale: &Locale,
    105            length: Option<DateTimeLength>,
    106            time_precision: Option<TimePrecision>,
    107            alignment: Option<DateTimeAlignment>,
    108        ) -> Result<Box<Self>, DateTimeFormatterLoadError> {
    109            let prefs = (&locale.0).into();
    110            let mut options = icu_datetime::fieldsets::T::for_length(map_or_default(length));
    111            options.time_precision = time_precision.map(Into::into);
    112            options.alignment = alignment.map(Into::into);
    113            Ok(Box::new(Self(
    114                icu_datetime
    115                    ::FixedCalendarDateTimeFormatter
    116                    ::try_new_with_buffer_provider(
    117                        provider.get()?,
    118                        prefs,
    119                        options
    120                    )?
    121                .cast_into_fset(),
    122            )))
    123        }
    124        
    125        #[diplomat::rust_link(icu::datetime::NoCalendarFormatter::format, FnInTypedef)]
    126        #[diplomat::rust_link(icu::datetime::FormattedDateTime, Struct, hidden)]
    127        #[diplomat::rust_link(icu::datetime::FormattedDateTime::to_string, FnInStruct, hidden)]
    128        pub fn format(
    129            &self,
    130            time: &Time,
    131            write: &mut diplomat_runtime::DiplomatWrite,
    132        ) {
    133            let value = time.0;
    134            let _infallible = self.0.format(&value).write_to(write);
    135        }
    136        
    137    }
    138    
    139 }