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 }