tor-browser

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

date_time_formatter.rs (62571B)


      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 icu_calendar::Gregorian;
     14    use writeable::Writeable;
     15 
     16    #[allow(unused_imports)]
     17    use crate::datetime_helpers::map_or_default;
     18 
     19    #[allow(unused_imports)]
     20    use crate::unstable::{
     21        date::ffi::{Date, IsoDate},
     22        datetime::ffi::DateTime,
     23        datetime_options::ffi::{DateTimeAlignment, DateTimeLength, TimePrecision, YearStyle},
     24        errors::ffi::DateTimeFormatterLoadError,
     25        errors::ffi::DateTimeMismatchedCalendarError,
     26        locale_core::ffi::Locale,
     27        time::ffi::Time,
     28    };
     29 
     30    #[cfg(feature = "buffer_provider")]
     31    use crate::unstable::provider::ffi::DataProvider;
     32 
     33    #[diplomat::opaque]
     34    #[diplomat::rust_link(icu::datetime::DateTimeFormatter, Struct)]
     35    pub struct DateTimeFormatter(
     36        pub  icu_datetime::DateTimeFormatter<
     37            icu_datetime::fieldsets::enums::CompositeDateTimeFieldSet,
     38        >,
     39    );
     40 
     41    impl DateTimeFormatter {
     42        #[diplomat::attr(all(supports = fallible_constructors, supports = named_constructors), named_constructor = "dt")]
     43        #[diplomat::rust_link(icu::datetime::DateTimeFormatter::try_new, FnInStruct)]
     44        #[diplomat::rust_link(icu::datetime::fieldsets::DT, Struct)]
     45        #[diplomat::rust_link(icu::datetime::fieldsets::DT::with_time_precision, FnInStruct, compact)]
     46        #[diplomat::rust_link(icu::datetime::fieldsets::DT::with_alignment, FnInStruct, compact)]
     47        #[diplomat::rust_link(icu::datetime::fieldsets::DT::for_length, FnInStruct, compact)]
     48        #[diplomat::rust_link(icu::datetime::fieldsets::DT::with_length, FnInStruct, hidden)]
     49        #[diplomat::rust_link(icu::datetime::fieldsets::DT::short, FnInStruct, hidden)]
     50        #[diplomat::rust_link(icu::datetime::fieldsets::DT::medium, FnInStruct, hidden)]
     51        #[diplomat::rust_link(icu::datetime::fieldsets::DT::long, FnInStruct, hidden)]
     52        #[diplomat::rust_link(icu::datetime::fieldsets::DT::with_zone, FnInStruct, hidden)] // functionality is in the zoned formatter but rustlink is here
     53        #[cfg(feature = "compiled_data")]
     54        pub fn create_dt(
     55            locale: &Locale,
     56            length: Option<DateTimeLength>,
     57            time_precision: Option<TimePrecision>,
     58            alignment: Option<DateTimeAlignment>,
     59        ) -> Result<Box<Self>, DateTimeFormatterLoadError> {
     60            let prefs = (&locale.0).into();
     61            let mut options = icu_datetime::fieldsets::DT::for_length(map_or_default(length));
     62            options.time_precision = time_precision.map(Into::into);
     63            options.alignment = alignment.map(Into::into);
     64            Ok(Box::new(Self(
     65                icu_datetime
     66                    ::DateTimeFormatter
     67                    ::try_new(
     68                        prefs,
     69                        options
     70                    )?
     71                .cast_into_fset(),
     72            )))
     73        }
     74        
     75        #[diplomat::attr(all(supports = fallible_constructors, supports = named_constructors), named_constructor = "dt_with_provider")]
     76        #[diplomat::rust_link(icu::datetime::DateTimeFormatter::try_new, FnInStruct)]
     77        #[diplomat::rust_link(icu::datetime::fieldsets::DT, Struct)]
     78        #[diplomat::rust_link(icu::datetime::fieldsets::DT::with_time_precision, FnInStruct, compact)]
     79        #[diplomat::rust_link(icu::datetime::fieldsets::DT::with_alignment, FnInStruct, compact)]
     80        #[diplomat::rust_link(icu::datetime::fieldsets::DT::for_length, FnInStruct, compact)]
     81        #[diplomat::rust_link(icu::datetime::fieldsets::DT::with_length, FnInStruct, hidden)]
     82        #[diplomat::rust_link(icu::datetime::fieldsets::DT::short, FnInStruct, hidden)]
     83        #[diplomat::rust_link(icu::datetime::fieldsets::DT::medium, FnInStruct, hidden)]
     84        #[diplomat::rust_link(icu::datetime::fieldsets::DT::long, FnInStruct, hidden)]
     85        #[diplomat::rust_link(icu::datetime::fieldsets::DT::with_zone, FnInStruct, hidden)] // functionality is in the zoned formatter but rustlink is here
     86        #[cfg(feature = "buffer_provider")]
     87        pub fn create_dt_with_provider(
     88            provider: &DataProvider,
     89            locale: &Locale,
     90            length: Option<DateTimeLength>,
     91            time_precision: Option<TimePrecision>,
     92            alignment: Option<DateTimeAlignment>,
     93        ) -> Result<Box<Self>, DateTimeFormatterLoadError> {
     94            let prefs = (&locale.0).into();
     95            let mut options = icu_datetime::fieldsets::DT::for_length(map_or_default(length));
     96            options.time_precision = time_precision.map(Into::into);
     97            options.alignment = alignment.map(Into::into);
     98            Ok(Box::new(Self(
     99                icu_datetime
    100                    ::DateTimeFormatter
    101                    ::try_new_with_buffer_provider(
    102                        provider.get()?,
    103                        prefs,
    104                        options
    105                    )?
    106                .cast_into_fset(),
    107            )))
    108        }
    109        
    110        #[diplomat::attr(all(supports = fallible_constructors, supports = named_constructors), named_constructor = "mdt")]
    111        #[diplomat::rust_link(icu::datetime::DateTimeFormatter::try_new, FnInStruct)]
    112        #[diplomat::rust_link(icu::datetime::fieldsets::MDT, Struct)]
    113        #[diplomat::rust_link(icu::datetime::fieldsets::MDT::with_time_precision, FnInStruct, compact)]
    114        #[diplomat::rust_link(icu::datetime::fieldsets::MDT::with_alignment, FnInStruct, compact)]
    115        #[diplomat::rust_link(icu::datetime::fieldsets::MDT::for_length, FnInStruct, compact)]
    116        #[diplomat::rust_link(icu::datetime::fieldsets::MDT::with_length, FnInStruct, hidden)]
    117        #[diplomat::rust_link(icu::datetime::fieldsets::MDT::short, FnInStruct, hidden)]
    118        #[diplomat::rust_link(icu::datetime::fieldsets::MDT::medium, FnInStruct, hidden)]
    119        #[diplomat::rust_link(icu::datetime::fieldsets::MDT::long, FnInStruct, hidden)]
    120        #[diplomat::rust_link(icu::datetime::fieldsets::MDT::with_zone, FnInStruct, hidden)] // functionality is in the zoned formatter but rustlink is here
    121        #[cfg(feature = "compiled_data")]
    122        pub fn create_mdt(
    123            locale: &Locale,
    124            length: Option<DateTimeLength>,
    125            time_precision: Option<TimePrecision>,
    126            alignment: Option<DateTimeAlignment>,
    127        ) -> Result<Box<Self>, DateTimeFormatterLoadError> {
    128            let prefs = (&locale.0).into();
    129            let mut options = icu_datetime::fieldsets::MDT::for_length(map_or_default(length));
    130            options.time_precision = time_precision.map(Into::into);
    131            options.alignment = alignment.map(Into::into);
    132            Ok(Box::new(Self(
    133                icu_datetime
    134                    ::DateTimeFormatter
    135                    ::try_new(
    136                        prefs,
    137                        options
    138                    )?
    139                .cast_into_fset(),
    140            )))
    141        }
    142        
    143        #[diplomat::attr(all(supports = fallible_constructors, supports = named_constructors), named_constructor = "mdt_with_provider")]
    144        #[diplomat::rust_link(icu::datetime::DateTimeFormatter::try_new, FnInStruct)]
    145        #[diplomat::rust_link(icu::datetime::fieldsets::MDT, Struct)]
    146        #[diplomat::rust_link(icu::datetime::fieldsets::MDT::with_time_precision, FnInStruct, compact)]
    147        #[diplomat::rust_link(icu::datetime::fieldsets::MDT::with_alignment, FnInStruct, compact)]
    148        #[diplomat::rust_link(icu::datetime::fieldsets::MDT::for_length, FnInStruct, compact)]
    149        #[diplomat::rust_link(icu::datetime::fieldsets::MDT::with_length, FnInStruct, hidden)]
    150        #[diplomat::rust_link(icu::datetime::fieldsets::MDT::short, FnInStruct, hidden)]
    151        #[diplomat::rust_link(icu::datetime::fieldsets::MDT::medium, FnInStruct, hidden)]
    152        #[diplomat::rust_link(icu::datetime::fieldsets::MDT::long, FnInStruct, hidden)]
    153        #[diplomat::rust_link(icu::datetime::fieldsets::MDT::with_zone, FnInStruct, hidden)] // functionality is in the zoned formatter but rustlink is here
    154        #[cfg(feature = "buffer_provider")]
    155        pub fn create_mdt_with_provider(
    156            provider: &DataProvider,
    157            locale: &Locale,
    158            length: Option<DateTimeLength>,
    159            time_precision: Option<TimePrecision>,
    160            alignment: Option<DateTimeAlignment>,
    161        ) -> Result<Box<Self>, DateTimeFormatterLoadError> {
    162            let prefs = (&locale.0).into();
    163            let mut options = icu_datetime::fieldsets::MDT::for_length(map_or_default(length));
    164            options.time_precision = time_precision.map(Into::into);
    165            options.alignment = alignment.map(Into::into);
    166            Ok(Box::new(Self(
    167                icu_datetime
    168                    ::DateTimeFormatter
    169                    ::try_new_with_buffer_provider(
    170                        provider.get()?,
    171                        prefs,
    172                        options
    173                    )?
    174                .cast_into_fset(),
    175            )))
    176        }
    177        
    178        #[diplomat::attr(all(supports = fallible_constructors, supports = named_constructors), named_constructor = "ymdt")]
    179        #[diplomat::rust_link(icu::datetime::DateTimeFormatter::try_new, FnInStruct)]
    180        #[diplomat::rust_link(icu::datetime::fieldsets::YMDT, Struct)]
    181        #[diplomat::rust_link(icu::datetime::fieldsets::YMDT::with_time_precision, FnInStruct, compact)]
    182        #[diplomat::rust_link(icu::datetime::fieldsets::YMDT::with_alignment, FnInStruct, compact)]
    183        #[diplomat::rust_link(icu::datetime::fieldsets::YMDT::with_year_style, FnInStruct, compact)]
    184        #[diplomat::rust_link(icu::datetime::fieldsets::YMDT::for_length, FnInStruct, compact)]
    185        #[diplomat::rust_link(icu::datetime::fieldsets::YMDT::with_length, FnInStruct, hidden)]
    186        #[diplomat::rust_link(icu::datetime::fieldsets::YMDT::short, FnInStruct, hidden)]
    187        #[diplomat::rust_link(icu::datetime::fieldsets::YMDT::medium, FnInStruct, hidden)]
    188        #[diplomat::rust_link(icu::datetime::fieldsets::YMDT::long, FnInStruct, hidden)]
    189        #[diplomat::rust_link(icu::datetime::fieldsets::YMDT::with_zone, FnInStruct, hidden)] // functionality is in the zoned formatter but rustlink is here
    190        #[diplomat::demo(default_constructor)]
    191        #[cfg(feature = "compiled_data")]
    192        pub fn create_ymdt(
    193            locale: &Locale,
    194            length: Option<DateTimeLength>,
    195            time_precision: Option<TimePrecision>,
    196            alignment: Option<DateTimeAlignment>,
    197            year_style: Option<YearStyle>,
    198        ) -> Result<Box<Self>, DateTimeFormatterLoadError> {
    199            let prefs = (&locale.0).into();
    200            let mut options = icu_datetime::fieldsets::YMDT::for_length(map_or_default(length));
    201            options.time_precision = time_precision.map(Into::into);
    202            options.alignment = alignment.map(Into::into);
    203            options.year_style = year_style.map(Into::into);
    204            Ok(Box::new(Self(
    205                icu_datetime
    206                    ::DateTimeFormatter
    207                    ::try_new(
    208                        prefs,
    209                        options
    210                    )?
    211                .cast_into_fset(),
    212            )))
    213        }
    214        
    215        #[diplomat::attr(all(supports = fallible_constructors, supports = named_constructors), named_constructor = "ymdt_with_provider")]
    216        #[diplomat::rust_link(icu::datetime::DateTimeFormatter::try_new, FnInStruct)]
    217        #[diplomat::rust_link(icu::datetime::fieldsets::YMDT, Struct)]
    218        #[diplomat::rust_link(icu::datetime::fieldsets::YMDT::with_time_precision, FnInStruct, compact)]
    219        #[diplomat::rust_link(icu::datetime::fieldsets::YMDT::with_alignment, FnInStruct, compact)]
    220        #[diplomat::rust_link(icu::datetime::fieldsets::YMDT::with_year_style, FnInStruct, compact)]
    221        #[diplomat::rust_link(icu::datetime::fieldsets::YMDT::for_length, FnInStruct, compact)]
    222        #[diplomat::rust_link(icu::datetime::fieldsets::YMDT::with_length, FnInStruct, hidden)]
    223        #[diplomat::rust_link(icu::datetime::fieldsets::YMDT::short, FnInStruct, hidden)]
    224        #[diplomat::rust_link(icu::datetime::fieldsets::YMDT::medium, FnInStruct, hidden)]
    225        #[diplomat::rust_link(icu::datetime::fieldsets::YMDT::long, FnInStruct, hidden)]
    226        #[diplomat::rust_link(icu::datetime::fieldsets::YMDT::with_zone, FnInStruct, hidden)] // functionality is in the zoned formatter but rustlink is here
    227        #[cfg(feature = "buffer_provider")]
    228        pub fn create_ymdt_with_provider(
    229            provider: &DataProvider,
    230            locale: &Locale,
    231            length: Option<DateTimeLength>,
    232            time_precision: Option<TimePrecision>,
    233            alignment: Option<DateTimeAlignment>,
    234            year_style: Option<YearStyle>,
    235        ) -> Result<Box<Self>, DateTimeFormatterLoadError> {
    236            let prefs = (&locale.0).into();
    237            let mut options = icu_datetime::fieldsets::YMDT::for_length(map_or_default(length));
    238            options.time_precision = time_precision.map(Into::into);
    239            options.alignment = alignment.map(Into::into);
    240            options.year_style = year_style.map(Into::into);
    241            Ok(Box::new(Self(
    242                icu_datetime
    243                    ::DateTimeFormatter
    244                    ::try_new_with_buffer_provider(
    245                        provider.get()?,
    246                        prefs,
    247                        options
    248                    )?
    249                .cast_into_fset(),
    250            )))
    251        }
    252        
    253        #[diplomat::attr(all(supports = fallible_constructors, supports = named_constructors), named_constructor = "det")]
    254        #[diplomat::rust_link(icu::datetime::DateTimeFormatter::try_new, FnInStruct)]
    255        #[diplomat::rust_link(icu::datetime::fieldsets::DET, Struct)]
    256        #[diplomat::rust_link(icu::datetime::fieldsets::DET::with_time_precision, FnInStruct, compact)]
    257        #[diplomat::rust_link(icu::datetime::fieldsets::DET::with_alignment, FnInStruct, compact)]
    258        #[diplomat::rust_link(icu::datetime::fieldsets::DET::for_length, FnInStruct, compact)]
    259        #[diplomat::rust_link(icu::datetime::fieldsets::DET::with_length, FnInStruct, hidden)]
    260        #[diplomat::rust_link(icu::datetime::fieldsets::DET::short, FnInStruct, hidden)]
    261        #[diplomat::rust_link(icu::datetime::fieldsets::DET::medium, FnInStruct, hidden)]
    262        #[diplomat::rust_link(icu::datetime::fieldsets::DET::long, FnInStruct, hidden)]
    263        #[diplomat::rust_link(icu::datetime::fieldsets::DET::with_zone, FnInStruct, hidden)] // functionality is in the zoned formatter but rustlink is here
    264        #[cfg(feature = "compiled_data")]
    265        pub fn create_det(
    266            locale: &Locale,
    267            length: Option<DateTimeLength>,
    268            time_precision: Option<TimePrecision>,
    269            alignment: Option<DateTimeAlignment>,
    270        ) -> Result<Box<Self>, DateTimeFormatterLoadError> {
    271            let prefs = (&locale.0).into();
    272            let mut options = icu_datetime::fieldsets::DET::for_length(map_or_default(length));
    273            options.time_precision = time_precision.map(Into::into);
    274            options.alignment = alignment.map(Into::into);
    275            Ok(Box::new(Self(
    276                icu_datetime
    277                    ::DateTimeFormatter
    278                    ::try_new(
    279                        prefs,
    280                        options
    281                    )?
    282                .cast_into_fset(),
    283            )))
    284        }
    285        
    286        #[diplomat::attr(all(supports = fallible_constructors, supports = named_constructors), named_constructor = "det_with_provider")]
    287        #[diplomat::rust_link(icu::datetime::DateTimeFormatter::try_new, FnInStruct)]
    288        #[diplomat::rust_link(icu::datetime::fieldsets::DET, Struct)]
    289        #[diplomat::rust_link(icu::datetime::fieldsets::DET::with_time_precision, FnInStruct, compact)]
    290        #[diplomat::rust_link(icu::datetime::fieldsets::DET::with_alignment, FnInStruct, compact)]
    291        #[diplomat::rust_link(icu::datetime::fieldsets::DET::for_length, FnInStruct, compact)]
    292        #[diplomat::rust_link(icu::datetime::fieldsets::DET::with_length, FnInStruct, hidden)]
    293        #[diplomat::rust_link(icu::datetime::fieldsets::DET::short, FnInStruct, hidden)]
    294        #[diplomat::rust_link(icu::datetime::fieldsets::DET::medium, FnInStruct, hidden)]
    295        #[diplomat::rust_link(icu::datetime::fieldsets::DET::long, FnInStruct, hidden)]
    296        #[diplomat::rust_link(icu::datetime::fieldsets::DET::with_zone, FnInStruct, hidden)] // functionality is in the zoned formatter but rustlink is here
    297        #[cfg(feature = "buffer_provider")]
    298        pub fn create_det_with_provider(
    299            provider: &DataProvider,
    300            locale: &Locale,
    301            length: Option<DateTimeLength>,
    302            time_precision: Option<TimePrecision>,
    303            alignment: Option<DateTimeAlignment>,
    304        ) -> Result<Box<Self>, DateTimeFormatterLoadError> {
    305            let prefs = (&locale.0).into();
    306            let mut options = icu_datetime::fieldsets::DET::for_length(map_or_default(length));
    307            options.time_precision = time_precision.map(Into::into);
    308            options.alignment = alignment.map(Into::into);
    309            Ok(Box::new(Self(
    310                icu_datetime
    311                    ::DateTimeFormatter
    312                    ::try_new_with_buffer_provider(
    313                        provider.get()?,
    314                        prefs,
    315                        options
    316                    )?
    317                .cast_into_fset(),
    318            )))
    319        }
    320        
    321        #[diplomat::attr(all(supports = fallible_constructors, supports = named_constructors), named_constructor = "mdet")]
    322        #[diplomat::rust_link(icu::datetime::DateTimeFormatter::try_new, FnInStruct)]
    323        #[diplomat::rust_link(icu::datetime::fieldsets::MDET, Struct)]
    324        #[diplomat::rust_link(icu::datetime::fieldsets::MDET::with_time_precision, FnInStruct, compact)]
    325        #[diplomat::rust_link(icu::datetime::fieldsets::MDET::with_alignment, FnInStruct, compact)]
    326        #[diplomat::rust_link(icu::datetime::fieldsets::MDET::for_length, FnInStruct, compact)]
    327        #[diplomat::rust_link(icu::datetime::fieldsets::MDET::with_length, FnInStruct, hidden)]
    328        #[diplomat::rust_link(icu::datetime::fieldsets::MDET::short, FnInStruct, hidden)]
    329        #[diplomat::rust_link(icu::datetime::fieldsets::MDET::medium, FnInStruct, hidden)]
    330        #[diplomat::rust_link(icu::datetime::fieldsets::MDET::long, FnInStruct, hidden)]
    331        #[diplomat::rust_link(icu::datetime::fieldsets::MDET::with_zone, FnInStruct, hidden)] // functionality is in the zoned formatter but rustlink is here
    332        #[cfg(feature = "compiled_data")]
    333        pub fn create_mdet(
    334            locale: &Locale,
    335            length: Option<DateTimeLength>,
    336            time_precision: Option<TimePrecision>,
    337            alignment: Option<DateTimeAlignment>,
    338        ) -> Result<Box<Self>, DateTimeFormatterLoadError> {
    339            let prefs = (&locale.0).into();
    340            let mut options = icu_datetime::fieldsets::MDET::for_length(map_or_default(length));
    341            options.time_precision = time_precision.map(Into::into);
    342            options.alignment = alignment.map(Into::into);
    343            Ok(Box::new(Self(
    344                icu_datetime
    345                    ::DateTimeFormatter
    346                    ::try_new(
    347                        prefs,
    348                        options
    349                    )?
    350                .cast_into_fset(),
    351            )))
    352        }
    353        
    354        #[diplomat::attr(all(supports = fallible_constructors, supports = named_constructors), named_constructor = "mdet_with_provider")]
    355        #[diplomat::rust_link(icu::datetime::DateTimeFormatter::try_new, FnInStruct)]
    356        #[diplomat::rust_link(icu::datetime::fieldsets::MDET, Struct)]
    357        #[diplomat::rust_link(icu::datetime::fieldsets::MDET::with_time_precision, FnInStruct, compact)]
    358        #[diplomat::rust_link(icu::datetime::fieldsets::MDET::with_alignment, FnInStruct, compact)]
    359        #[diplomat::rust_link(icu::datetime::fieldsets::MDET::for_length, FnInStruct, compact)]
    360        #[diplomat::rust_link(icu::datetime::fieldsets::MDET::with_length, FnInStruct, hidden)]
    361        #[diplomat::rust_link(icu::datetime::fieldsets::MDET::short, FnInStruct, hidden)]
    362        #[diplomat::rust_link(icu::datetime::fieldsets::MDET::medium, FnInStruct, hidden)]
    363        #[diplomat::rust_link(icu::datetime::fieldsets::MDET::long, FnInStruct, hidden)]
    364        #[diplomat::rust_link(icu::datetime::fieldsets::MDET::with_zone, FnInStruct, hidden)] // functionality is in the zoned formatter but rustlink is here
    365        #[cfg(feature = "buffer_provider")]
    366        pub fn create_mdet_with_provider(
    367            provider: &DataProvider,
    368            locale: &Locale,
    369            length: Option<DateTimeLength>,
    370            time_precision: Option<TimePrecision>,
    371            alignment: Option<DateTimeAlignment>,
    372        ) -> Result<Box<Self>, DateTimeFormatterLoadError> {
    373            let prefs = (&locale.0).into();
    374            let mut options = icu_datetime::fieldsets::MDET::for_length(map_or_default(length));
    375            options.time_precision = time_precision.map(Into::into);
    376            options.alignment = alignment.map(Into::into);
    377            Ok(Box::new(Self(
    378                icu_datetime
    379                    ::DateTimeFormatter
    380                    ::try_new_with_buffer_provider(
    381                        provider.get()?,
    382                        prefs,
    383                        options
    384                    )?
    385                .cast_into_fset(),
    386            )))
    387        }
    388        
    389        #[diplomat::attr(all(supports = fallible_constructors, supports = named_constructors), named_constructor = "ymdet")]
    390        #[diplomat::rust_link(icu::datetime::DateTimeFormatter::try_new, FnInStruct)]
    391        #[diplomat::rust_link(icu::datetime::fieldsets::YMDET, Struct)]
    392        #[diplomat::rust_link(icu::datetime::fieldsets::YMDET::with_time_precision, FnInStruct, compact)]
    393        #[diplomat::rust_link(icu::datetime::fieldsets::YMDET::with_alignment, FnInStruct, compact)]
    394        #[diplomat::rust_link(icu::datetime::fieldsets::YMDET::with_year_style, FnInStruct, compact)]
    395        #[diplomat::rust_link(icu::datetime::fieldsets::YMDET::for_length, FnInStruct, compact)]
    396        #[diplomat::rust_link(icu::datetime::fieldsets::YMDET::with_length, FnInStruct, hidden)]
    397        #[diplomat::rust_link(icu::datetime::fieldsets::YMDET::short, FnInStruct, hidden)]
    398        #[diplomat::rust_link(icu::datetime::fieldsets::YMDET::medium, FnInStruct, hidden)]
    399        #[diplomat::rust_link(icu::datetime::fieldsets::YMDET::long, FnInStruct, hidden)]
    400        #[diplomat::rust_link(icu::datetime::fieldsets::YMDET::with_zone, FnInStruct, hidden)] // functionality is in the zoned formatter but rustlink is here
    401        #[cfg(feature = "compiled_data")]
    402        pub fn create_ymdet(
    403            locale: &Locale,
    404            length: Option<DateTimeLength>,
    405            time_precision: Option<TimePrecision>,
    406            alignment: Option<DateTimeAlignment>,
    407            year_style: Option<YearStyle>,
    408        ) -> Result<Box<Self>, DateTimeFormatterLoadError> {
    409            let prefs = (&locale.0).into();
    410            let mut options = icu_datetime::fieldsets::YMDET::for_length(map_or_default(length));
    411            options.time_precision = time_precision.map(Into::into);
    412            options.alignment = alignment.map(Into::into);
    413            options.year_style = year_style.map(Into::into);
    414            Ok(Box::new(Self(
    415                icu_datetime
    416                    ::DateTimeFormatter
    417                    ::try_new(
    418                        prefs,
    419                        options
    420                    )?
    421                .cast_into_fset(),
    422            )))
    423        }
    424        
    425        #[diplomat::attr(all(supports = fallible_constructors, supports = named_constructors), named_constructor = "ymdet_with_provider")]
    426        #[diplomat::rust_link(icu::datetime::DateTimeFormatter::try_new, FnInStruct)]
    427        #[diplomat::rust_link(icu::datetime::fieldsets::YMDET, Struct)]
    428        #[diplomat::rust_link(icu::datetime::fieldsets::YMDET::with_time_precision, FnInStruct, compact)]
    429        #[diplomat::rust_link(icu::datetime::fieldsets::YMDET::with_alignment, FnInStruct, compact)]
    430        #[diplomat::rust_link(icu::datetime::fieldsets::YMDET::with_year_style, FnInStruct, compact)]
    431        #[diplomat::rust_link(icu::datetime::fieldsets::YMDET::for_length, FnInStruct, compact)]
    432        #[diplomat::rust_link(icu::datetime::fieldsets::YMDET::with_length, FnInStruct, hidden)]
    433        #[diplomat::rust_link(icu::datetime::fieldsets::YMDET::short, FnInStruct, hidden)]
    434        #[diplomat::rust_link(icu::datetime::fieldsets::YMDET::medium, FnInStruct, hidden)]
    435        #[diplomat::rust_link(icu::datetime::fieldsets::YMDET::long, FnInStruct, hidden)]
    436        #[diplomat::rust_link(icu::datetime::fieldsets::YMDET::with_zone, FnInStruct, hidden)] // functionality is in the zoned formatter but rustlink is here
    437        #[cfg(feature = "buffer_provider")]
    438        pub fn create_ymdet_with_provider(
    439            provider: &DataProvider,
    440            locale: &Locale,
    441            length: Option<DateTimeLength>,
    442            time_precision: Option<TimePrecision>,
    443            alignment: Option<DateTimeAlignment>,
    444            year_style: Option<YearStyle>,
    445        ) -> Result<Box<Self>, DateTimeFormatterLoadError> {
    446            let prefs = (&locale.0).into();
    447            let mut options = icu_datetime::fieldsets::YMDET::for_length(map_or_default(length));
    448            options.time_precision = time_precision.map(Into::into);
    449            options.alignment = alignment.map(Into::into);
    450            options.year_style = year_style.map(Into::into);
    451            Ok(Box::new(Self(
    452                icu_datetime
    453                    ::DateTimeFormatter
    454                    ::try_new_with_buffer_provider(
    455                        provider.get()?,
    456                        prefs,
    457                        options
    458                    )?
    459                .cast_into_fset(),
    460            )))
    461        }
    462        
    463        #[diplomat::attr(all(supports = fallible_constructors, supports = named_constructors), named_constructor = "et")]
    464        #[diplomat::rust_link(icu::datetime::DateTimeFormatter::try_new, FnInStruct)]
    465        #[diplomat::rust_link(icu::datetime::fieldsets::ET, Struct)]
    466        #[diplomat::rust_link(icu::datetime::fieldsets::ET::with_time_precision, FnInStruct, compact)]
    467        #[diplomat::rust_link(icu::datetime::fieldsets::ET::with_alignment, FnInStruct, compact)]
    468        #[diplomat::rust_link(icu::datetime::fieldsets::ET::for_length, FnInStruct, compact)]
    469        #[diplomat::rust_link(icu::datetime::fieldsets::ET::with_length, FnInStruct, hidden)]
    470        #[diplomat::rust_link(icu::datetime::fieldsets::ET::short, FnInStruct, hidden)]
    471        #[diplomat::rust_link(icu::datetime::fieldsets::ET::medium, FnInStruct, hidden)]
    472        #[diplomat::rust_link(icu::datetime::fieldsets::ET::long, FnInStruct, hidden)]
    473        #[diplomat::rust_link(icu::datetime::fieldsets::ET::with_zone, FnInStruct, hidden)] // functionality is in the zoned formatter but rustlink is here
    474        #[cfg(feature = "compiled_data")]
    475        pub fn create_et(
    476            locale: &Locale,
    477            length: Option<DateTimeLength>,
    478            time_precision: Option<TimePrecision>,
    479            alignment: Option<DateTimeAlignment>,
    480        ) -> Result<Box<Self>, DateTimeFormatterLoadError> {
    481            let prefs = (&locale.0).into();
    482            let mut options = icu_datetime::fieldsets::ET::for_length(map_or_default(length));
    483            options.time_precision = time_precision.map(Into::into);
    484            options.alignment = alignment.map(Into::into);
    485            Ok(Box::new(Self(
    486                icu_datetime
    487                    ::DateTimeFormatter
    488                    ::try_new(
    489                        prefs,
    490                        options
    491                    )?
    492                .cast_into_fset(),
    493            )))
    494        }
    495        
    496        #[diplomat::attr(all(supports = fallible_constructors, supports = named_constructors), named_constructor = "et_with_provider")]
    497        #[diplomat::rust_link(icu::datetime::DateTimeFormatter::try_new, FnInStruct)]
    498        #[diplomat::rust_link(icu::datetime::fieldsets::ET, Struct)]
    499        #[diplomat::rust_link(icu::datetime::fieldsets::ET::with_time_precision, FnInStruct, compact)]
    500        #[diplomat::rust_link(icu::datetime::fieldsets::ET::with_alignment, FnInStruct, compact)]
    501        #[diplomat::rust_link(icu::datetime::fieldsets::ET::for_length, FnInStruct, compact)]
    502        #[diplomat::rust_link(icu::datetime::fieldsets::ET::with_length, FnInStruct, hidden)]
    503        #[diplomat::rust_link(icu::datetime::fieldsets::ET::short, FnInStruct, hidden)]
    504        #[diplomat::rust_link(icu::datetime::fieldsets::ET::medium, FnInStruct, hidden)]
    505        #[diplomat::rust_link(icu::datetime::fieldsets::ET::long, FnInStruct, hidden)]
    506        #[diplomat::rust_link(icu::datetime::fieldsets::ET::with_zone, FnInStruct, hidden)] // functionality is in the zoned formatter but rustlink is here
    507        #[cfg(feature = "buffer_provider")]
    508        pub fn create_et_with_provider(
    509            provider: &DataProvider,
    510            locale: &Locale,
    511            length: Option<DateTimeLength>,
    512            time_precision: Option<TimePrecision>,
    513            alignment: Option<DateTimeAlignment>,
    514        ) -> Result<Box<Self>, DateTimeFormatterLoadError> {
    515            let prefs = (&locale.0).into();
    516            let mut options = icu_datetime::fieldsets::ET::for_length(map_or_default(length));
    517            options.time_precision = time_precision.map(Into::into);
    518            options.alignment = alignment.map(Into::into);
    519            Ok(Box::new(Self(
    520                icu_datetime
    521                    ::DateTimeFormatter
    522                    ::try_new_with_buffer_provider(
    523                        provider.get()?,
    524                        prefs,
    525                        options
    526                    )?
    527                .cast_into_fset(),
    528            )))
    529        }
    530        
    531        #[diplomat::rust_link(icu::datetime::DateTimeFormatter::format, FnInStruct)]
    532        #[diplomat::rust_link(icu::datetime::FormattedDateTime, Struct, hidden)]
    533        #[diplomat::rust_link(icu::datetime::FormattedDateTime::to_string, FnInStruct, hidden)]
    534        pub fn format_iso(
    535            &self,
    536            date: &IsoDate,
    537            time: &Time,
    538            write: &mut diplomat_runtime::DiplomatWrite,
    539        ) {
    540            let date = date.0;
    541            let value = icu_time::DateTime {
    542                date,
    543                time: time.0,
    544            };
    545            let _infallible = self.0.format(&value).write_to(write);
    546        }
    547        
    548        #[diplomat::rust_link(icu::datetime::DateTimeFormatter::format_same_calendar, FnInStruct)]
    549        #[diplomat::rust_link(icu::datetime::FormattedDateTime, Struct, hidden)]
    550        #[diplomat::rust_link(icu::datetime::FormattedDateTime::to_string, FnInStruct, hidden)]
    551        pub fn format_same_calendar(
    552            &self,
    553            date: &Date,
    554            time: &Time,
    555            write: &mut diplomat_runtime::DiplomatWrite,
    556        ) -> Result<(), DateTimeMismatchedCalendarError> {
    557            let date = date.0.as_borrowed();
    558            let value = icu_time::DateTime {
    559                date,
    560                time: time.0,
    561            };
    562            let _infallible = self.0.format_same_calendar(&value)?.write_to(write);
    563            Ok(())
    564        }
    565    }
    566    
    567 
    568    #[diplomat::opaque]
    569    #[diplomat::rust_link(icu::datetime::FixedCalendarDateTimeFormatter, Struct)]
    570    pub struct DateTimeFormatterGregorian(
    571        pub  icu_datetime::FixedCalendarDateTimeFormatter<
    572            Gregorian,
    573            icu_datetime::fieldsets::enums::CompositeDateTimeFieldSet,
    574        >,
    575    );
    576 
    577    impl DateTimeFormatterGregorian {
    578        #[diplomat::attr(all(supports = fallible_constructors, supports = named_constructors), named_constructor = "dt")]
    579        #[diplomat::rust_link(icu::datetime::FixedCalendarDateTimeFormatter::try_new, FnInStruct)]
    580        #[diplomat::rust_link(icu::datetime::fieldsets::DT, Struct)]
    581        #[diplomat::rust_link(icu::datetime::fieldsets::DT::with_time_precision, FnInStruct, compact)]
    582        #[diplomat::rust_link(icu::datetime::fieldsets::DT::with_alignment, FnInStruct, compact)]
    583        #[diplomat::rust_link(icu::datetime::fieldsets::DT::for_length, FnInStruct, compact)]
    584        #[diplomat::rust_link(icu::datetime::fieldsets::DT::with_length, FnInStruct, hidden)]
    585        #[diplomat::rust_link(icu::datetime::fieldsets::DT::short, FnInStruct, hidden)]
    586        #[diplomat::rust_link(icu::datetime::fieldsets::DT::medium, FnInStruct, hidden)]
    587        #[diplomat::rust_link(icu::datetime::fieldsets::DT::long, FnInStruct, hidden)]
    588        #[diplomat::rust_link(icu::datetime::fieldsets::DT::with_zone, FnInStruct, hidden)] // functionality is in the zoned formatter but rustlink is here
    589        #[cfg(feature = "compiled_data")]
    590        pub fn create_dt(
    591            locale: &Locale,
    592            length: Option<DateTimeLength>,
    593            time_precision: Option<TimePrecision>,
    594            alignment: Option<DateTimeAlignment>,
    595        ) -> Result<Box<Self>, DateTimeFormatterLoadError> {
    596            let prefs = (&locale.0).into();
    597            let mut options = icu_datetime::fieldsets::DT::for_length(map_or_default(length));
    598            options.time_precision = time_precision.map(Into::into);
    599            options.alignment = alignment.map(Into::into);
    600            Ok(Box::new(Self(
    601                icu_datetime
    602                    ::FixedCalendarDateTimeFormatter
    603                    ::try_new(
    604                        prefs,
    605                        options
    606                    )?
    607                .cast_into_fset(),
    608            )))
    609        }
    610        
    611        #[diplomat::attr(all(supports = fallible_constructors, supports = named_constructors), named_constructor = "dt_with_provider")]
    612        #[diplomat::rust_link(icu::datetime::FixedCalendarDateTimeFormatter::try_new, FnInStruct)]
    613        #[diplomat::rust_link(icu::datetime::fieldsets::DT, Struct)]
    614        #[diplomat::rust_link(icu::datetime::fieldsets::DT::with_time_precision, FnInStruct, compact)]
    615        #[diplomat::rust_link(icu::datetime::fieldsets::DT::with_alignment, FnInStruct, compact)]
    616        #[diplomat::rust_link(icu::datetime::fieldsets::DT::for_length, FnInStruct, compact)]
    617        #[diplomat::rust_link(icu::datetime::fieldsets::DT::with_length, FnInStruct, hidden)]
    618        #[diplomat::rust_link(icu::datetime::fieldsets::DT::short, FnInStruct, hidden)]
    619        #[diplomat::rust_link(icu::datetime::fieldsets::DT::medium, FnInStruct, hidden)]
    620        #[diplomat::rust_link(icu::datetime::fieldsets::DT::long, FnInStruct, hidden)]
    621        #[diplomat::rust_link(icu::datetime::fieldsets::DT::with_zone, FnInStruct, hidden)] // functionality is in the zoned formatter but rustlink is here
    622        #[cfg(feature = "buffer_provider")]
    623        pub fn create_dt_with_provider(
    624            provider: &DataProvider,
    625            locale: &Locale,
    626            length: Option<DateTimeLength>,
    627            time_precision: Option<TimePrecision>,
    628            alignment: Option<DateTimeAlignment>,
    629        ) -> Result<Box<Self>, DateTimeFormatterLoadError> {
    630            let prefs = (&locale.0).into();
    631            let mut options = icu_datetime::fieldsets::DT::for_length(map_or_default(length));
    632            options.time_precision = time_precision.map(Into::into);
    633            options.alignment = alignment.map(Into::into);
    634            Ok(Box::new(Self(
    635                icu_datetime
    636                    ::FixedCalendarDateTimeFormatter
    637                    ::try_new_with_buffer_provider(
    638                        provider.get()?,
    639                        prefs,
    640                        options
    641                    )?
    642                .cast_into_fset(),
    643            )))
    644        }
    645        
    646        #[diplomat::attr(all(supports = fallible_constructors, supports = named_constructors), named_constructor = "mdt")]
    647        #[diplomat::rust_link(icu::datetime::FixedCalendarDateTimeFormatter::try_new, FnInStruct)]
    648        #[diplomat::rust_link(icu::datetime::fieldsets::MDT, Struct)]
    649        #[diplomat::rust_link(icu::datetime::fieldsets::MDT::with_time_precision, FnInStruct, compact)]
    650        #[diplomat::rust_link(icu::datetime::fieldsets::MDT::with_alignment, FnInStruct, compact)]
    651        #[diplomat::rust_link(icu::datetime::fieldsets::MDT::for_length, FnInStruct, compact)]
    652        #[diplomat::rust_link(icu::datetime::fieldsets::MDT::with_length, FnInStruct, hidden)]
    653        #[diplomat::rust_link(icu::datetime::fieldsets::MDT::short, FnInStruct, hidden)]
    654        #[diplomat::rust_link(icu::datetime::fieldsets::MDT::medium, FnInStruct, hidden)]
    655        #[diplomat::rust_link(icu::datetime::fieldsets::MDT::long, FnInStruct, hidden)]
    656        #[diplomat::rust_link(icu::datetime::fieldsets::MDT::with_zone, FnInStruct, hidden)] // functionality is in the zoned formatter but rustlink is here
    657        #[cfg(feature = "compiled_data")]
    658        pub fn create_mdt(
    659            locale: &Locale,
    660            length: Option<DateTimeLength>,
    661            time_precision: Option<TimePrecision>,
    662            alignment: Option<DateTimeAlignment>,
    663        ) -> Result<Box<Self>, DateTimeFormatterLoadError> {
    664            let prefs = (&locale.0).into();
    665            let mut options = icu_datetime::fieldsets::MDT::for_length(map_or_default(length));
    666            options.time_precision = time_precision.map(Into::into);
    667            options.alignment = alignment.map(Into::into);
    668            Ok(Box::new(Self(
    669                icu_datetime
    670                    ::FixedCalendarDateTimeFormatter
    671                    ::try_new(
    672                        prefs,
    673                        options
    674                    )?
    675                .cast_into_fset(),
    676            )))
    677        }
    678        
    679        #[diplomat::attr(all(supports = fallible_constructors, supports = named_constructors), named_constructor = "mdt_with_provider")]
    680        #[diplomat::rust_link(icu::datetime::FixedCalendarDateTimeFormatter::try_new, FnInStruct)]
    681        #[diplomat::rust_link(icu::datetime::fieldsets::MDT, Struct)]
    682        #[diplomat::rust_link(icu::datetime::fieldsets::MDT::with_time_precision, FnInStruct, compact)]
    683        #[diplomat::rust_link(icu::datetime::fieldsets::MDT::with_alignment, FnInStruct, compact)]
    684        #[diplomat::rust_link(icu::datetime::fieldsets::MDT::for_length, FnInStruct, compact)]
    685        #[diplomat::rust_link(icu::datetime::fieldsets::MDT::with_length, FnInStruct, hidden)]
    686        #[diplomat::rust_link(icu::datetime::fieldsets::MDT::short, FnInStruct, hidden)]
    687        #[diplomat::rust_link(icu::datetime::fieldsets::MDT::medium, FnInStruct, hidden)]
    688        #[diplomat::rust_link(icu::datetime::fieldsets::MDT::long, FnInStruct, hidden)]
    689        #[diplomat::rust_link(icu::datetime::fieldsets::MDT::with_zone, FnInStruct, hidden)] // functionality is in the zoned formatter but rustlink is here
    690        #[cfg(feature = "buffer_provider")]
    691        pub fn create_mdt_with_provider(
    692            provider: &DataProvider,
    693            locale: &Locale,
    694            length: Option<DateTimeLength>,
    695            time_precision: Option<TimePrecision>,
    696            alignment: Option<DateTimeAlignment>,
    697        ) -> Result<Box<Self>, DateTimeFormatterLoadError> {
    698            let prefs = (&locale.0).into();
    699            let mut options = icu_datetime::fieldsets::MDT::for_length(map_or_default(length));
    700            options.time_precision = time_precision.map(Into::into);
    701            options.alignment = alignment.map(Into::into);
    702            Ok(Box::new(Self(
    703                icu_datetime
    704                    ::FixedCalendarDateTimeFormatter
    705                    ::try_new_with_buffer_provider(
    706                        provider.get()?,
    707                        prefs,
    708                        options
    709                    )?
    710                .cast_into_fset(),
    711            )))
    712        }
    713        
    714        #[diplomat::attr(all(supports = fallible_constructors, supports = named_constructors), named_constructor = "ymdt")]
    715        #[diplomat::rust_link(icu::datetime::FixedCalendarDateTimeFormatter::try_new, FnInStruct)]
    716        #[diplomat::rust_link(icu::datetime::fieldsets::YMDT, Struct)]
    717        #[diplomat::rust_link(icu::datetime::fieldsets::YMDT::with_time_precision, FnInStruct, compact)]
    718        #[diplomat::rust_link(icu::datetime::fieldsets::YMDT::with_alignment, FnInStruct, compact)]
    719        #[diplomat::rust_link(icu::datetime::fieldsets::YMDT::with_year_style, FnInStruct, compact)]
    720        #[diplomat::rust_link(icu::datetime::fieldsets::YMDT::for_length, FnInStruct, compact)]
    721        #[diplomat::rust_link(icu::datetime::fieldsets::YMDT::with_length, FnInStruct, hidden)]
    722        #[diplomat::rust_link(icu::datetime::fieldsets::YMDT::short, FnInStruct, hidden)]
    723        #[diplomat::rust_link(icu::datetime::fieldsets::YMDT::medium, FnInStruct, hidden)]
    724        #[diplomat::rust_link(icu::datetime::fieldsets::YMDT::long, FnInStruct, hidden)]
    725        #[diplomat::rust_link(icu::datetime::fieldsets::YMDT::with_zone, FnInStruct, hidden)] // functionality is in the zoned formatter but rustlink is here
    726        #[diplomat::demo(default_constructor)]
    727        #[cfg(feature = "compiled_data")]
    728        pub fn create_ymdt(
    729            locale: &Locale,
    730            length: Option<DateTimeLength>,
    731            time_precision: Option<TimePrecision>,
    732            alignment: Option<DateTimeAlignment>,
    733            year_style: Option<YearStyle>,
    734        ) -> Result<Box<Self>, DateTimeFormatterLoadError> {
    735            let prefs = (&locale.0).into();
    736            let mut options = icu_datetime::fieldsets::YMDT::for_length(map_or_default(length));
    737            options.time_precision = time_precision.map(Into::into);
    738            options.alignment = alignment.map(Into::into);
    739            options.year_style = year_style.map(Into::into);
    740            Ok(Box::new(Self(
    741                icu_datetime
    742                    ::FixedCalendarDateTimeFormatter
    743                    ::try_new(
    744                        prefs,
    745                        options
    746                    )?
    747                .cast_into_fset(),
    748            )))
    749        }
    750        
    751        #[diplomat::attr(all(supports = fallible_constructors, supports = named_constructors), named_constructor = "ymdt_with_provider")]
    752        #[diplomat::rust_link(icu::datetime::FixedCalendarDateTimeFormatter::try_new, FnInStruct)]
    753        #[diplomat::rust_link(icu::datetime::fieldsets::YMDT, Struct)]
    754        #[diplomat::rust_link(icu::datetime::fieldsets::YMDT::with_time_precision, FnInStruct, compact)]
    755        #[diplomat::rust_link(icu::datetime::fieldsets::YMDT::with_alignment, FnInStruct, compact)]
    756        #[diplomat::rust_link(icu::datetime::fieldsets::YMDT::with_year_style, FnInStruct, compact)]
    757        #[diplomat::rust_link(icu::datetime::fieldsets::YMDT::for_length, FnInStruct, compact)]
    758        #[diplomat::rust_link(icu::datetime::fieldsets::YMDT::with_length, FnInStruct, hidden)]
    759        #[diplomat::rust_link(icu::datetime::fieldsets::YMDT::short, FnInStruct, hidden)]
    760        #[diplomat::rust_link(icu::datetime::fieldsets::YMDT::medium, FnInStruct, hidden)]
    761        #[diplomat::rust_link(icu::datetime::fieldsets::YMDT::long, FnInStruct, hidden)]
    762        #[diplomat::rust_link(icu::datetime::fieldsets::YMDT::with_zone, FnInStruct, hidden)] // functionality is in the zoned formatter but rustlink is here
    763        #[cfg(feature = "buffer_provider")]
    764        pub fn create_ymdt_with_provider(
    765            provider: &DataProvider,
    766            locale: &Locale,
    767            length: Option<DateTimeLength>,
    768            time_precision: Option<TimePrecision>,
    769            alignment: Option<DateTimeAlignment>,
    770            year_style: Option<YearStyle>,
    771        ) -> Result<Box<Self>, DateTimeFormatterLoadError> {
    772            let prefs = (&locale.0).into();
    773            let mut options = icu_datetime::fieldsets::YMDT::for_length(map_or_default(length));
    774            options.time_precision = time_precision.map(Into::into);
    775            options.alignment = alignment.map(Into::into);
    776            options.year_style = year_style.map(Into::into);
    777            Ok(Box::new(Self(
    778                icu_datetime
    779                    ::FixedCalendarDateTimeFormatter
    780                    ::try_new_with_buffer_provider(
    781                        provider.get()?,
    782                        prefs,
    783                        options
    784                    )?
    785                .cast_into_fset(),
    786            )))
    787        }
    788        
    789        #[diplomat::attr(all(supports = fallible_constructors, supports = named_constructors), named_constructor = "det")]
    790        #[diplomat::rust_link(icu::datetime::FixedCalendarDateTimeFormatter::try_new, FnInStruct)]
    791        #[diplomat::rust_link(icu::datetime::fieldsets::DET, Struct)]
    792        #[diplomat::rust_link(icu::datetime::fieldsets::DET::with_time_precision, FnInStruct, compact)]
    793        #[diplomat::rust_link(icu::datetime::fieldsets::DET::with_alignment, FnInStruct, compact)]
    794        #[diplomat::rust_link(icu::datetime::fieldsets::DET::for_length, FnInStruct, compact)]
    795        #[diplomat::rust_link(icu::datetime::fieldsets::DET::with_length, FnInStruct, hidden)]
    796        #[diplomat::rust_link(icu::datetime::fieldsets::DET::short, FnInStruct, hidden)]
    797        #[diplomat::rust_link(icu::datetime::fieldsets::DET::medium, FnInStruct, hidden)]
    798        #[diplomat::rust_link(icu::datetime::fieldsets::DET::long, FnInStruct, hidden)]
    799        #[diplomat::rust_link(icu::datetime::fieldsets::DET::with_zone, FnInStruct, hidden)] // functionality is in the zoned formatter but rustlink is here
    800        #[cfg(feature = "compiled_data")]
    801        pub fn create_det(
    802            locale: &Locale,
    803            length: Option<DateTimeLength>,
    804            time_precision: Option<TimePrecision>,
    805            alignment: Option<DateTimeAlignment>,
    806        ) -> Result<Box<Self>, DateTimeFormatterLoadError> {
    807            let prefs = (&locale.0).into();
    808            let mut options = icu_datetime::fieldsets::DET::for_length(map_or_default(length));
    809            options.time_precision = time_precision.map(Into::into);
    810            options.alignment = alignment.map(Into::into);
    811            Ok(Box::new(Self(
    812                icu_datetime
    813                    ::FixedCalendarDateTimeFormatter
    814                    ::try_new(
    815                        prefs,
    816                        options
    817                    )?
    818                .cast_into_fset(),
    819            )))
    820        }
    821        
    822        #[diplomat::attr(all(supports = fallible_constructors, supports = named_constructors), named_constructor = "det_with_provider")]
    823        #[diplomat::rust_link(icu::datetime::FixedCalendarDateTimeFormatter::try_new, FnInStruct)]
    824        #[diplomat::rust_link(icu::datetime::fieldsets::DET, Struct)]
    825        #[diplomat::rust_link(icu::datetime::fieldsets::DET::with_time_precision, FnInStruct, compact)]
    826        #[diplomat::rust_link(icu::datetime::fieldsets::DET::with_alignment, FnInStruct, compact)]
    827        #[diplomat::rust_link(icu::datetime::fieldsets::DET::for_length, FnInStruct, compact)]
    828        #[diplomat::rust_link(icu::datetime::fieldsets::DET::with_length, FnInStruct, hidden)]
    829        #[diplomat::rust_link(icu::datetime::fieldsets::DET::short, FnInStruct, hidden)]
    830        #[diplomat::rust_link(icu::datetime::fieldsets::DET::medium, FnInStruct, hidden)]
    831        #[diplomat::rust_link(icu::datetime::fieldsets::DET::long, FnInStruct, hidden)]
    832        #[diplomat::rust_link(icu::datetime::fieldsets::DET::with_zone, FnInStruct, hidden)] // functionality is in the zoned formatter but rustlink is here
    833        #[cfg(feature = "buffer_provider")]
    834        pub fn create_det_with_provider(
    835            provider: &DataProvider,
    836            locale: &Locale,
    837            length: Option<DateTimeLength>,
    838            time_precision: Option<TimePrecision>,
    839            alignment: Option<DateTimeAlignment>,
    840        ) -> Result<Box<Self>, DateTimeFormatterLoadError> {
    841            let prefs = (&locale.0).into();
    842            let mut options = icu_datetime::fieldsets::DET::for_length(map_or_default(length));
    843            options.time_precision = time_precision.map(Into::into);
    844            options.alignment = alignment.map(Into::into);
    845            Ok(Box::new(Self(
    846                icu_datetime
    847                    ::FixedCalendarDateTimeFormatter
    848                    ::try_new_with_buffer_provider(
    849                        provider.get()?,
    850                        prefs,
    851                        options
    852                    )?
    853                .cast_into_fset(),
    854            )))
    855        }
    856        
    857        #[diplomat::attr(all(supports = fallible_constructors, supports = named_constructors), named_constructor = "mdet")]
    858        #[diplomat::rust_link(icu::datetime::FixedCalendarDateTimeFormatter::try_new, FnInStruct)]
    859        #[diplomat::rust_link(icu::datetime::fieldsets::MDET, Struct)]
    860        #[diplomat::rust_link(icu::datetime::fieldsets::MDET::with_time_precision, FnInStruct, compact)]
    861        #[diplomat::rust_link(icu::datetime::fieldsets::MDET::with_alignment, FnInStruct, compact)]
    862        #[diplomat::rust_link(icu::datetime::fieldsets::MDET::for_length, FnInStruct, compact)]
    863        #[diplomat::rust_link(icu::datetime::fieldsets::MDET::with_length, FnInStruct, hidden)]
    864        #[diplomat::rust_link(icu::datetime::fieldsets::MDET::short, FnInStruct, hidden)]
    865        #[diplomat::rust_link(icu::datetime::fieldsets::MDET::medium, FnInStruct, hidden)]
    866        #[diplomat::rust_link(icu::datetime::fieldsets::MDET::long, FnInStruct, hidden)]
    867        #[diplomat::rust_link(icu::datetime::fieldsets::MDET::with_zone, FnInStruct, hidden)] // functionality is in the zoned formatter but rustlink is here
    868        #[cfg(feature = "compiled_data")]
    869        pub fn create_mdet(
    870            locale: &Locale,
    871            length: Option<DateTimeLength>,
    872            time_precision: Option<TimePrecision>,
    873            alignment: Option<DateTimeAlignment>,
    874        ) -> Result<Box<Self>, DateTimeFormatterLoadError> {
    875            let prefs = (&locale.0).into();
    876            let mut options = icu_datetime::fieldsets::MDET::for_length(map_or_default(length));
    877            options.time_precision = time_precision.map(Into::into);
    878            options.alignment = alignment.map(Into::into);
    879            Ok(Box::new(Self(
    880                icu_datetime
    881                    ::FixedCalendarDateTimeFormatter
    882                    ::try_new(
    883                        prefs,
    884                        options
    885                    )?
    886                .cast_into_fset(),
    887            )))
    888        }
    889        
    890        #[diplomat::attr(all(supports = fallible_constructors, supports = named_constructors), named_constructor = "mdet_with_provider")]
    891        #[diplomat::rust_link(icu::datetime::FixedCalendarDateTimeFormatter::try_new, FnInStruct)]
    892        #[diplomat::rust_link(icu::datetime::fieldsets::MDET, Struct)]
    893        #[diplomat::rust_link(icu::datetime::fieldsets::MDET::with_time_precision, FnInStruct, compact)]
    894        #[diplomat::rust_link(icu::datetime::fieldsets::MDET::with_alignment, FnInStruct, compact)]
    895        #[diplomat::rust_link(icu::datetime::fieldsets::MDET::for_length, FnInStruct, compact)]
    896        #[diplomat::rust_link(icu::datetime::fieldsets::MDET::with_length, FnInStruct, hidden)]
    897        #[diplomat::rust_link(icu::datetime::fieldsets::MDET::short, FnInStruct, hidden)]
    898        #[diplomat::rust_link(icu::datetime::fieldsets::MDET::medium, FnInStruct, hidden)]
    899        #[diplomat::rust_link(icu::datetime::fieldsets::MDET::long, FnInStruct, hidden)]
    900        #[diplomat::rust_link(icu::datetime::fieldsets::MDET::with_zone, FnInStruct, hidden)] // functionality is in the zoned formatter but rustlink is here
    901        #[cfg(feature = "buffer_provider")]
    902        pub fn create_mdet_with_provider(
    903            provider: &DataProvider,
    904            locale: &Locale,
    905            length: Option<DateTimeLength>,
    906            time_precision: Option<TimePrecision>,
    907            alignment: Option<DateTimeAlignment>,
    908        ) -> Result<Box<Self>, DateTimeFormatterLoadError> {
    909            let prefs = (&locale.0).into();
    910            let mut options = icu_datetime::fieldsets::MDET::for_length(map_or_default(length));
    911            options.time_precision = time_precision.map(Into::into);
    912            options.alignment = alignment.map(Into::into);
    913            Ok(Box::new(Self(
    914                icu_datetime
    915                    ::FixedCalendarDateTimeFormatter
    916                    ::try_new_with_buffer_provider(
    917                        provider.get()?,
    918                        prefs,
    919                        options
    920                    )?
    921                .cast_into_fset(),
    922            )))
    923        }
    924        
    925        #[diplomat::attr(all(supports = fallible_constructors, supports = named_constructors), named_constructor = "ymdet")]
    926        #[diplomat::rust_link(icu::datetime::FixedCalendarDateTimeFormatter::try_new, FnInStruct)]
    927        #[diplomat::rust_link(icu::datetime::fieldsets::YMDET, Struct)]
    928        #[diplomat::rust_link(icu::datetime::fieldsets::YMDET::with_time_precision, FnInStruct, compact)]
    929        #[diplomat::rust_link(icu::datetime::fieldsets::YMDET::with_alignment, FnInStruct, compact)]
    930        #[diplomat::rust_link(icu::datetime::fieldsets::YMDET::with_year_style, FnInStruct, compact)]
    931        #[diplomat::rust_link(icu::datetime::fieldsets::YMDET::for_length, FnInStruct, compact)]
    932        #[diplomat::rust_link(icu::datetime::fieldsets::YMDET::with_length, FnInStruct, hidden)]
    933        #[diplomat::rust_link(icu::datetime::fieldsets::YMDET::short, FnInStruct, hidden)]
    934        #[diplomat::rust_link(icu::datetime::fieldsets::YMDET::medium, FnInStruct, hidden)]
    935        #[diplomat::rust_link(icu::datetime::fieldsets::YMDET::long, FnInStruct, hidden)]
    936        #[diplomat::rust_link(icu::datetime::fieldsets::YMDET::with_zone, FnInStruct, hidden)] // functionality is in the zoned formatter but rustlink is here
    937        #[cfg(feature = "compiled_data")]
    938        pub fn create_ymdet(
    939            locale: &Locale,
    940            length: Option<DateTimeLength>,
    941            time_precision: Option<TimePrecision>,
    942            alignment: Option<DateTimeAlignment>,
    943            year_style: Option<YearStyle>,
    944        ) -> Result<Box<Self>, DateTimeFormatterLoadError> {
    945            let prefs = (&locale.0).into();
    946            let mut options = icu_datetime::fieldsets::YMDET::for_length(map_or_default(length));
    947            options.time_precision = time_precision.map(Into::into);
    948            options.alignment = alignment.map(Into::into);
    949            options.year_style = year_style.map(Into::into);
    950            Ok(Box::new(Self(
    951                icu_datetime
    952                    ::FixedCalendarDateTimeFormatter
    953                    ::try_new(
    954                        prefs,
    955                        options
    956                    )?
    957                .cast_into_fset(),
    958            )))
    959        }
    960        
    961        #[diplomat::attr(all(supports = fallible_constructors, supports = named_constructors), named_constructor = "ymdet_with_provider")]
    962        #[diplomat::rust_link(icu::datetime::FixedCalendarDateTimeFormatter::try_new, FnInStruct)]
    963        #[diplomat::rust_link(icu::datetime::fieldsets::YMDET, Struct)]
    964        #[diplomat::rust_link(icu::datetime::fieldsets::YMDET::with_time_precision, FnInStruct, compact)]
    965        #[diplomat::rust_link(icu::datetime::fieldsets::YMDET::with_alignment, FnInStruct, compact)]
    966        #[diplomat::rust_link(icu::datetime::fieldsets::YMDET::with_year_style, FnInStruct, compact)]
    967        #[diplomat::rust_link(icu::datetime::fieldsets::YMDET::for_length, FnInStruct, compact)]
    968        #[diplomat::rust_link(icu::datetime::fieldsets::YMDET::with_length, FnInStruct, hidden)]
    969        #[diplomat::rust_link(icu::datetime::fieldsets::YMDET::short, FnInStruct, hidden)]
    970        #[diplomat::rust_link(icu::datetime::fieldsets::YMDET::medium, FnInStruct, hidden)]
    971        #[diplomat::rust_link(icu::datetime::fieldsets::YMDET::long, FnInStruct, hidden)]
    972        #[diplomat::rust_link(icu::datetime::fieldsets::YMDET::with_zone, FnInStruct, hidden)] // functionality is in the zoned formatter but rustlink is here
    973        #[cfg(feature = "buffer_provider")]
    974        pub fn create_ymdet_with_provider(
    975            provider: &DataProvider,
    976            locale: &Locale,
    977            length: Option<DateTimeLength>,
    978            time_precision: Option<TimePrecision>,
    979            alignment: Option<DateTimeAlignment>,
    980            year_style: Option<YearStyle>,
    981        ) -> Result<Box<Self>, DateTimeFormatterLoadError> {
    982            let prefs = (&locale.0).into();
    983            let mut options = icu_datetime::fieldsets::YMDET::for_length(map_or_default(length));
    984            options.time_precision = time_precision.map(Into::into);
    985            options.alignment = alignment.map(Into::into);
    986            options.year_style = year_style.map(Into::into);
    987            Ok(Box::new(Self(
    988                icu_datetime
    989                    ::FixedCalendarDateTimeFormatter
    990                    ::try_new_with_buffer_provider(
    991                        provider.get()?,
    992                        prefs,
    993                        options
    994                    )?
    995                .cast_into_fset(),
    996            )))
    997        }
    998        
    999        #[diplomat::attr(all(supports = fallible_constructors, supports = named_constructors), named_constructor = "et")]
   1000        #[diplomat::rust_link(icu::datetime::FixedCalendarDateTimeFormatter::try_new, FnInStruct)]
   1001        #[diplomat::rust_link(icu::datetime::fieldsets::ET, Struct)]
   1002        #[diplomat::rust_link(icu::datetime::fieldsets::ET::with_time_precision, FnInStruct, compact)]
   1003        #[diplomat::rust_link(icu::datetime::fieldsets::ET::with_alignment, FnInStruct, compact)]
   1004        #[diplomat::rust_link(icu::datetime::fieldsets::ET::for_length, FnInStruct, compact)]
   1005        #[diplomat::rust_link(icu::datetime::fieldsets::ET::with_length, FnInStruct, hidden)]
   1006        #[diplomat::rust_link(icu::datetime::fieldsets::ET::short, FnInStruct, hidden)]
   1007        #[diplomat::rust_link(icu::datetime::fieldsets::ET::medium, FnInStruct, hidden)]
   1008        #[diplomat::rust_link(icu::datetime::fieldsets::ET::long, FnInStruct, hidden)]
   1009        #[diplomat::rust_link(icu::datetime::fieldsets::ET::with_zone, FnInStruct, hidden)] // functionality is in the zoned formatter but rustlink is here
   1010        #[cfg(feature = "compiled_data")]
   1011        pub fn create_et(
   1012            locale: &Locale,
   1013            length: Option<DateTimeLength>,
   1014            time_precision: Option<TimePrecision>,
   1015            alignment: Option<DateTimeAlignment>,
   1016        ) -> Result<Box<Self>, DateTimeFormatterLoadError> {
   1017            let prefs = (&locale.0).into();
   1018            let mut options = icu_datetime::fieldsets::ET::for_length(map_or_default(length));
   1019            options.time_precision = time_precision.map(Into::into);
   1020            options.alignment = alignment.map(Into::into);
   1021            Ok(Box::new(Self(
   1022                icu_datetime
   1023                    ::FixedCalendarDateTimeFormatter
   1024                    ::try_new(
   1025                        prefs,
   1026                        options
   1027                    )?
   1028                .cast_into_fset(),
   1029            )))
   1030        }
   1031        
   1032        #[diplomat::attr(all(supports = fallible_constructors, supports = named_constructors), named_constructor = "et_with_provider")]
   1033        #[diplomat::rust_link(icu::datetime::FixedCalendarDateTimeFormatter::try_new, FnInStruct)]
   1034        #[diplomat::rust_link(icu::datetime::fieldsets::ET, Struct)]
   1035        #[diplomat::rust_link(icu::datetime::fieldsets::ET::with_time_precision, FnInStruct, compact)]
   1036        #[diplomat::rust_link(icu::datetime::fieldsets::ET::with_alignment, FnInStruct, compact)]
   1037        #[diplomat::rust_link(icu::datetime::fieldsets::ET::for_length, FnInStruct, compact)]
   1038        #[diplomat::rust_link(icu::datetime::fieldsets::ET::with_length, FnInStruct, hidden)]
   1039        #[diplomat::rust_link(icu::datetime::fieldsets::ET::short, FnInStruct, hidden)]
   1040        #[diplomat::rust_link(icu::datetime::fieldsets::ET::medium, FnInStruct, hidden)]
   1041        #[diplomat::rust_link(icu::datetime::fieldsets::ET::long, FnInStruct, hidden)]
   1042        #[diplomat::rust_link(icu::datetime::fieldsets::ET::with_zone, FnInStruct, hidden)] // functionality is in the zoned formatter but rustlink is here
   1043        #[cfg(feature = "buffer_provider")]
   1044        pub fn create_et_with_provider(
   1045            provider: &DataProvider,
   1046            locale: &Locale,
   1047            length: Option<DateTimeLength>,
   1048            time_precision: Option<TimePrecision>,
   1049            alignment: Option<DateTimeAlignment>,
   1050        ) -> Result<Box<Self>, DateTimeFormatterLoadError> {
   1051            let prefs = (&locale.0).into();
   1052            let mut options = icu_datetime::fieldsets::ET::for_length(map_or_default(length));
   1053            options.time_precision = time_precision.map(Into::into);
   1054            options.alignment = alignment.map(Into::into);
   1055            Ok(Box::new(Self(
   1056                icu_datetime
   1057                    ::FixedCalendarDateTimeFormatter
   1058                    ::try_new_with_buffer_provider(
   1059                        provider.get()?,
   1060                        prefs,
   1061                        options
   1062                    )?
   1063                .cast_into_fset(),
   1064            )))
   1065        }
   1066        
   1067        #[diplomat::rust_link(icu::datetime::FixedCalendarDateTimeFormatter::format, FnInStruct)]
   1068        #[diplomat::rust_link(icu::datetime::FormattedDateTime, Struct, hidden)]
   1069        #[diplomat::rust_link(icu::datetime::FormattedDateTime::to_string, FnInStruct, hidden)]
   1070        pub fn format_iso(
   1071            &self,
   1072            date: &IsoDate,
   1073            time: &Time,
   1074            write: &mut diplomat_runtime::DiplomatWrite,
   1075        ) {
   1076            let date = date.0.to_calendar(Gregorian);
   1077            let value = icu_time::DateTime {
   1078                date,
   1079                time: time.0,
   1080            };
   1081            let _infallible = self.0.format(&value).write_to(write);
   1082        }
   1083        
   1084    }
   1085    
   1086 }