icu_capi/
time_formatter.rs

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")]
11pub mod ffi {
12    use alloc::boxed::Box;
13    use writeable::Writeable;
14
15    #[allow(unused_imports)]
16    use crate::{
17        date::ffi::{Date, IsoDate},
18        datetime::ffi::DateTime,
19        datetime_helpers::map_or_default,
20        datetime_options::ffi::{DateTimeAlignment, DateTimeLength, TimePrecision, YearStyle},
21        errors::ffi::DateTimeFormatterLoadError,
22        errors::ffi::DateTimeMismatchedCalendarError,
23        locale_core::ffi::Locale,
24        time::ffi::Time,
25    };
26
27    #[cfg(feature = "buffer_provider")]
28    use crate::provider::ffi::DataProvider;
29
30    #[diplomat::opaque]
31    #[diplomat::rust_link(icu::datetime::FixedCalendarDateTimeFormatter, Typedef)]
32    pub struct TimeFormatter(
33        pub  icu_datetime::FixedCalendarDateTimeFormatter<
34            (),
35            icu_datetime::fieldsets::enums::TimeFieldSet,
36        >,
37    );
38
39    impl TimeFormatter {
40        #[diplomat::attr(supports = fallible_constructors, constructor)]
41        #[diplomat::rust_link(icu::datetime::fieldsets::T, Struct)]
42        #[diplomat::rust_link(icu::datetime::fieldsets::T::with_time_precision, FnInStruct, compact)]
43        #[diplomat::rust_link(icu::datetime::fieldsets::T::with_alignment, FnInStruct, compact)]
44        #[diplomat::rust_link(icu::datetime::fieldsets::T::with_length, FnInStruct, compact)]
45        #[diplomat::rust_link(icu::datetime::fieldsets::T::short, FnInStruct, hidden)]
46        #[diplomat::rust_link(icu::datetime::fieldsets::T::medium, FnInStruct, hidden)]
47        #[diplomat::rust_link(icu::datetime::fieldsets::T::long, FnInStruct, hidden)]
48        #[diplomat::demo(default_constructor)]
49        #[cfg(feature = "compiled_data")]
50        pub fn create(
51            locale: &Locale,
52            length: Option<DateTimeLength>,
53            time_precision: Option<TimePrecision>,
54            alignment: Option<DateTimeAlignment>,
55        ) -> Result<Box<Self>, DateTimeFormatterLoadError> {
56            let prefs = (&locale.0).into();
57            let mut options = icu_datetime::fieldsets::T::with_length(map_or_default(length));
58            options.time_precision = time_precision.map(Into::into);
59            options.alignment = alignment.map(Into::into);
60            Ok(Box::new(Self(
61                icu_datetime
62                    ::FixedCalendarDateTimeFormatter
63                    ::try_new(
64                        prefs,
65                        options
66                    )?
67                .cast_into_fset(),
68            )))
69        }
70        
71        #[diplomat::attr(all(supports = fallible_constructors, supports = named_constructors), named_constructor = "with_provider")]
72        #[diplomat::rust_link(icu::datetime::fieldsets::T, Struct)]
73        #[diplomat::rust_link(icu::datetime::fieldsets::T::with_time_precision, FnInStruct, compact)]
74        #[diplomat::rust_link(icu::datetime::fieldsets::T::with_alignment, FnInStruct, compact)]
75        #[diplomat::rust_link(icu::datetime::fieldsets::T::with_length, FnInStruct, compact)]
76        #[diplomat::rust_link(icu::datetime::fieldsets::T::short, FnInStruct, hidden)]
77        #[diplomat::rust_link(icu::datetime::fieldsets::T::medium, FnInStruct, hidden)]
78        #[diplomat::rust_link(icu::datetime::fieldsets::T::long, FnInStruct, hidden)]
79        #[cfg(feature = "buffer_provider")]
80        pub fn create_with_provider(
81            provider: &DataProvider,
82            locale: &Locale,
83            length: Option<DateTimeLength>,
84            time_precision: Option<TimePrecision>,
85            alignment: Option<DateTimeAlignment>,
86        ) -> Result<Box<Self>, DateTimeFormatterLoadError> {
87            let prefs = (&locale.0).into();
88            let mut options = icu_datetime::fieldsets::T::with_length(map_or_default(length));
89            options.time_precision = time_precision.map(Into::into);
90            options.alignment = alignment.map(Into::into);
91            Ok(Box::new(Self(
92                icu_datetime
93                    ::FixedCalendarDateTimeFormatter
94                    ::try_new_with_buffer_provider(
95                        provider.get()?,
96                        prefs,
97                        options
98                    )?
99                .cast_into_fset(),
100            )))
101        }
102        
103        #[diplomat::rust_link(icu::datetime::FixedCalendarDateTimeFormatter::format, FnInStruct)]
104        #[diplomat::rust_link(icu::datetime::FormattedDateTime, Struct, hidden)]
105        #[diplomat::rust_link(icu::datetime::FormattedDateTime::to_string, FnInStruct, hidden)]
106        pub fn format(
107            &self,
108            time: &Time,
109            write: &mut diplomat_runtime::DiplomatWrite,
110        ) {
111            let value = time.0;
112            let _infallible = self.0.format(&value).write_to(write);
113        }
114        
115    }
116    
117}