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