diff --git a/components/datetime/src/builder.rs b/components/datetime/src/builder.rs index 521dff8ba8d..fb7ed71c31b 100644 --- a/components/datetime/src/builder.rs +++ b/components/datetime/src/builder.rs @@ -357,10 +357,6 @@ pub struct FieldSetBuilder { pub year_style: Option, } -// This is the default length when the builder is used. This could have been defined in the macro -// that generates the `take_from_builder` fns, but it would be easily lost. -pub(crate) const DEFAULT_LENGTH: Length = Length::Medium; - enum DateOrCalendarPeriodFieldSet { Date(DateFieldSet), CalendarPeriod(CalendarPeriodFieldSet), diff --git a/components/datetime/src/fieldsets.rs b/components/datetime/src/fieldsets.rs index 6d37db6f450..f0427c674d7 100644 --- a/components/datetime/src/fieldsets.rs +++ b/components/datetime/src/fieldsets.rs @@ -239,13 +239,12 @@ macro_rules! impl_marker_with_options { } } /// Builds this field set, removing the needed options from the builder. - /// If length is needed but is None, falls back to `builder::DEFAULT_LENGTH`. #[allow(unused)] pub(crate) fn take_from_builder( options: &mut builder::FieldSetBuilder ) -> Self { Self { - $(length: yes_to!(options.length.take().unwrap_or(builder::DEFAULT_LENGTH), $sample_length),)? + $(length: yes_to!(options.length.take().unwrap_or_default(), $sample_length),)? $(alignment: yes_to!(options.alignment.take(), $alignment_yes),)? $(year_style: yes_to!(options.year_style.take(), $yearstyle_yes),)? $(time_precision: yes_to!(options.time_precision.take(), $timeprecision_yes),)? diff --git a/components/datetime/src/options/mod.rs b/components/datetime/src/options/mod.rs index ab1b3a0c672..63aab4ad67d 100644 --- a/components/datetime/src/options/mod.rs +++ b/components/datetime/src/options/mod.rs @@ -58,7 +58,7 @@ use crate::neo_serde::TimePrecisionSerde; /// "January 1, 2000" /// ); /// ``` -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] +#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, Default)] #[cfg_attr( all(feature = "serde", feature = "experimental"), derive(serde::Serialize, serde::Deserialize) @@ -73,6 +73,9 @@ pub enum Length { /// A long date; typically spelled-out, as in “January 1, 2000”. Long = 4, /// A medium-sized date; typically abbreviated, as in “Jan. 1, 2000”. + /// + /// This is the default. + #[default] Medium = 3, /// A short date; typically numeric, as in “1/1/2000”. Short = 1, @@ -128,7 +131,7 @@ impl IntoOption for Length { /// "01/01/25" /// ); /// ``` -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] +#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, Default)] #[cfg_attr( all(feature = "serde", feature = "experimental"), derive(serde::Serialize, serde::Deserialize) @@ -142,6 +145,7 @@ pub enum Alignment { /// Align fields as the locale specifies them to be aligned. /// /// This is the default option. + #[default] Auto, /// Align fields as appropriate for a column layout. For example: /// @@ -257,7 +261,7 @@ impl IntoOption for Alignment { /// "1/1/2025 AD" /// ); /// ``` -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] +#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, Default)] #[cfg_attr( all(feature = "serde", feature = "experimental"), derive(serde::Serialize, serde::Deserialize) @@ -279,6 +283,7 @@ pub enum YearStyle { /// - `77 AD` /// - `1900` /// - `'24` + #[default] Auto, /// Always display the century, and display the era when needed to /// disambiguate the year, based on locale preferences. diff --git a/components/datetime/src/raw/neo.rs b/components/datetime/src/raw/neo.rs index fa023304565..13a3c80deab 100644 --- a/components/datetime/src/raw/neo.rs +++ b/components/datetime/src/raw/neo.rs @@ -224,7 +224,7 @@ impl DatePatternSelectionData { pub(crate) fn select(&self, input: &ExtractedInput) -> DatePatternDataBorrowed { match self { DatePatternSelectionData::SkeletonDate { options, payload } => { - let year_style = options.year_style.unwrap_or(YearStyle::Auto); + let year_style = options.year_style.unwrap_or_default(); let variant = match ( year_style, input @@ -870,7 +870,8 @@ impl<'a> ItemsAndOptions<'a> { #[allow(clippy::single_match)] // need `ref mut`, which doesn't work in `if let`? match &mut pattern_item { PatternItem::Field(ref mut field) => { - if matches!(self.alignment, Some(Alignment::Column)) + let alignment = self.alignment.unwrap_or_default(); + if matches!(alignment, Alignment::Column) && field.length == FieldLength::One && matches!( field.symbol, diff --git a/ffi/capi/bindings/c/DateTimeAlignment.d.h b/ffi/capi/bindings/c/DateTimeAlignment.d.h new file mode 100644 index 00000000000..41ce282be34 --- /dev/null +++ b/ffi/capi/bindings/c/DateTimeAlignment.d.h @@ -0,0 +1,23 @@ +#ifndef DateTimeAlignment_D_H +#define DateTimeAlignment_D_H + +#include +#include +#include +#include +#include "diplomat_runtime.h" + + + + + +typedef enum DateTimeAlignment { + DateTimeAlignment_Auto = 0, + DateTimeAlignment_Column = 1, +} DateTimeAlignment; + +typedef struct DateTimeAlignment_option {union { DateTimeAlignment ok; }; bool is_ok; } DateTimeAlignment_option; + + + +#endif // DateTimeAlignment_D_H diff --git a/ffi/capi/bindings/c/DateTimeAlignment.h b/ffi/capi/bindings/c/DateTimeAlignment.h new file mode 100644 index 00000000000..c718de92a30 --- /dev/null +++ b/ffi/capi/bindings/c/DateTimeAlignment.h @@ -0,0 +1,23 @@ +#ifndef DateTimeAlignment_H +#define DateTimeAlignment_H + +#include +#include +#include +#include +#include "diplomat_runtime.h" + + +#include "DateTimeAlignment.d.h" + + + + + + + + + + + +#endif // DateTimeAlignment_H diff --git a/ffi/capi/bindings/c/DateTimeFormatter.h b/ffi/capi/bindings/c/DateTimeFormatter.h index 7f1a822cee7..499282b9f64 100644 --- a/ffi/capi/bindings/c/DateTimeFormatter.h +++ b/ffi/capi/bindings/c/DateTimeFormatter.h @@ -7,15 +7,17 @@ #include #include "diplomat_runtime.h" -#include "Calendar.d.h" #include "DataProvider.d.h" #include "Date.d.h" -#include "DateTimeFormatError.d.h" +#include "DateTimeAlignment.d.h" #include "DateTimeFormatterLoadError.d.h" #include "DateTimeLength.d.h" +#include "DateTimeMismatchedCalendarError.d.h" #include "IsoDate.d.h" #include "Locale.d.h" #include "Time.d.h" +#include "TimePrecision.d.h" +#include "YearStyle.d.h" #include "DateTimeFormatter.d.h" @@ -24,19 +26,52 @@ -typedef struct icu4x_DateTimeFormatter_create_with_length_mv1_result {union {DateTimeFormatter* ok; DateTimeFormatterLoadError err;}; bool is_ok;} icu4x_DateTimeFormatter_create_with_length_mv1_result; -icu4x_DateTimeFormatter_create_with_length_mv1_result icu4x_DateTimeFormatter_create_with_length_mv1(const Locale* locale, DateTimeLength length); +typedef struct icu4x_DateTimeFormatter_create_dt_mv1_result {union {DateTimeFormatter* ok; DateTimeFormatterLoadError err;}; bool is_ok;} icu4x_DateTimeFormatter_create_dt_mv1_result; +icu4x_DateTimeFormatter_create_dt_mv1_result icu4x_DateTimeFormatter_create_dt_mv1(const Locale* locale, DateTimeLength_option length, TimePrecision_option time_precision, DateTimeAlignment_option alignment); -typedef struct icu4x_DateTimeFormatter_create_with_length_and_provider_mv1_result {union {DateTimeFormatter* ok; DateTimeFormatterLoadError err;}; bool is_ok;} icu4x_DateTimeFormatter_create_with_length_and_provider_mv1_result; -icu4x_DateTimeFormatter_create_with_length_and_provider_mv1_result icu4x_DateTimeFormatter_create_with_length_and_provider_mv1(const DataProvider* provider, const Locale* locale, DateTimeLength length); +typedef struct icu4x_DateTimeFormatter_create_dt_with_provider_mv1_result {union {DateTimeFormatter* ok; DateTimeFormatterLoadError err;}; bool is_ok;} icu4x_DateTimeFormatter_create_dt_with_provider_mv1_result; +icu4x_DateTimeFormatter_create_dt_with_provider_mv1_result icu4x_DateTimeFormatter_create_dt_with_provider_mv1(const DataProvider* provider, const Locale* locale, DateTimeLength_option length, TimePrecision_option time_precision, DateTimeAlignment_option alignment); -typedef struct icu4x_DateTimeFormatter_format_mv1_result {union { DateTimeFormatError err;}; bool is_ok;} icu4x_DateTimeFormatter_format_mv1_result; -icu4x_DateTimeFormatter_format_mv1_result icu4x_DateTimeFormatter_format_mv1(const DateTimeFormatter* self, const Date* date, const Time* time, DiplomatWrite* write); +typedef struct icu4x_DateTimeFormatter_create_mdt_mv1_result {union {DateTimeFormatter* ok; DateTimeFormatterLoadError err;}; bool is_ok;} icu4x_DateTimeFormatter_create_mdt_mv1_result; +icu4x_DateTimeFormatter_create_mdt_mv1_result icu4x_DateTimeFormatter_create_mdt_mv1(const Locale* locale, DateTimeLength_option length, TimePrecision_option time_precision, DateTimeAlignment_option alignment); -typedef struct icu4x_DateTimeFormatter_format_iso_mv1_result {union { DateTimeFormatError err;}; bool is_ok;} icu4x_DateTimeFormatter_format_iso_mv1_result; -icu4x_DateTimeFormatter_format_iso_mv1_result icu4x_DateTimeFormatter_format_iso_mv1(const DateTimeFormatter* self, const IsoDate* date, const Time* time, DiplomatWrite* write); +typedef struct icu4x_DateTimeFormatter_create_mdt_with_provider_mv1_result {union {DateTimeFormatter* ok; DateTimeFormatterLoadError err;}; bool is_ok;} icu4x_DateTimeFormatter_create_mdt_with_provider_mv1_result; +icu4x_DateTimeFormatter_create_mdt_with_provider_mv1_result icu4x_DateTimeFormatter_create_mdt_with_provider_mv1(const DataProvider* provider, const Locale* locale, DateTimeLength_option length, TimePrecision_option time_precision, DateTimeAlignment_option alignment); -Calendar* icu4x_DateTimeFormatter_calendar_mv1(const DateTimeFormatter* self); +typedef struct icu4x_DateTimeFormatter_create_ymdt_mv1_result {union {DateTimeFormatter* ok; DateTimeFormatterLoadError err;}; bool is_ok;} icu4x_DateTimeFormatter_create_ymdt_mv1_result; +icu4x_DateTimeFormatter_create_ymdt_mv1_result icu4x_DateTimeFormatter_create_ymdt_mv1(const Locale* locale, DateTimeLength_option length, TimePrecision_option time_precision, DateTimeAlignment_option alignment, YearStyle_option year_style); + +typedef struct icu4x_DateTimeFormatter_create_ymdt_with_provider_mv1_result {union {DateTimeFormatter* ok; DateTimeFormatterLoadError err;}; bool is_ok;} icu4x_DateTimeFormatter_create_ymdt_with_provider_mv1_result; +icu4x_DateTimeFormatter_create_ymdt_with_provider_mv1_result icu4x_DateTimeFormatter_create_ymdt_with_provider_mv1(const DataProvider* provider, const Locale* locale, DateTimeLength_option length, TimePrecision_option time_precision, DateTimeAlignment_option alignment, YearStyle_option year_style); + +typedef struct icu4x_DateTimeFormatter_create_det_mv1_result {union {DateTimeFormatter* ok; DateTimeFormatterLoadError err;}; bool is_ok;} icu4x_DateTimeFormatter_create_det_mv1_result; +icu4x_DateTimeFormatter_create_det_mv1_result icu4x_DateTimeFormatter_create_det_mv1(const Locale* locale, DateTimeLength_option length, TimePrecision_option time_precision, DateTimeAlignment_option alignment); + +typedef struct icu4x_DateTimeFormatter_create_det_with_provider_mv1_result {union {DateTimeFormatter* ok; DateTimeFormatterLoadError err;}; bool is_ok;} icu4x_DateTimeFormatter_create_det_with_provider_mv1_result; +icu4x_DateTimeFormatter_create_det_with_provider_mv1_result icu4x_DateTimeFormatter_create_det_with_provider_mv1(const DataProvider* provider, const Locale* locale, DateTimeLength_option length, TimePrecision_option time_precision, DateTimeAlignment_option alignment); + +typedef struct icu4x_DateTimeFormatter_create_mdet_mv1_result {union {DateTimeFormatter* ok; DateTimeFormatterLoadError err;}; bool is_ok;} icu4x_DateTimeFormatter_create_mdet_mv1_result; +icu4x_DateTimeFormatter_create_mdet_mv1_result icu4x_DateTimeFormatter_create_mdet_mv1(const Locale* locale, DateTimeLength_option length, TimePrecision_option time_precision, DateTimeAlignment_option alignment); + +typedef struct icu4x_DateTimeFormatter_create_mdet_with_provider_mv1_result {union {DateTimeFormatter* ok; DateTimeFormatterLoadError err;}; bool is_ok;} icu4x_DateTimeFormatter_create_mdet_with_provider_mv1_result; +icu4x_DateTimeFormatter_create_mdet_with_provider_mv1_result icu4x_DateTimeFormatter_create_mdet_with_provider_mv1(const DataProvider* provider, const Locale* locale, DateTimeLength_option length, TimePrecision_option time_precision, DateTimeAlignment_option alignment); + +typedef struct icu4x_DateTimeFormatter_create_ymdet_mv1_result {union {DateTimeFormatter* ok; DateTimeFormatterLoadError err;}; bool is_ok;} icu4x_DateTimeFormatter_create_ymdet_mv1_result; +icu4x_DateTimeFormatter_create_ymdet_mv1_result icu4x_DateTimeFormatter_create_ymdet_mv1(const Locale* locale, DateTimeLength_option length, TimePrecision_option time_precision, DateTimeAlignment_option alignment, YearStyle_option year_style); + +typedef struct icu4x_DateTimeFormatter_create_ymdet_with_provider_mv1_result {union {DateTimeFormatter* ok; DateTimeFormatterLoadError err;}; bool is_ok;} icu4x_DateTimeFormatter_create_ymdet_with_provider_mv1_result; +icu4x_DateTimeFormatter_create_ymdet_with_provider_mv1_result icu4x_DateTimeFormatter_create_ymdet_with_provider_mv1(const DataProvider* provider, const Locale* locale, DateTimeLength_option length, TimePrecision_option time_precision, DateTimeAlignment_option alignment, YearStyle_option year_style); + +typedef struct icu4x_DateTimeFormatter_create_et_mv1_result {union {DateTimeFormatter* ok; DateTimeFormatterLoadError err;}; bool is_ok;} icu4x_DateTimeFormatter_create_et_mv1_result; +icu4x_DateTimeFormatter_create_et_mv1_result icu4x_DateTimeFormatter_create_et_mv1(const Locale* locale, DateTimeLength_option length, TimePrecision_option time_precision, DateTimeAlignment_option alignment); + +typedef struct icu4x_DateTimeFormatter_create_et_with_provider_mv1_result {union {DateTimeFormatter* ok; DateTimeFormatterLoadError err;}; bool is_ok;} icu4x_DateTimeFormatter_create_et_with_provider_mv1_result; +icu4x_DateTimeFormatter_create_et_with_provider_mv1_result icu4x_DateTimeFormatter_create_et_with_provider_mv1(const DataProvider* provider, const Locale* locale, DateTimeLength_option length, TimePrecision_option time_precision, DateTimeAlignment_option alignment); + +void icu4x_DateTimeFormatter_format_iso_mv1(const DateTimeFormatter* self, const IsoDate* date, const Time* time, DiplomatWrite* write); + +typedef struct icu4x_DateTimeFormatter_format_same_calendar_mv1_result {union { DateTimeMismatchedCalendarError err;}; bool is_ok;} icu4x_DateTimeFormatter_format_same_calendar_mv1_result; +icu4x_DateTimeFormatter_format_same_calendar_mv1_result icu4x_DateTimeFormatter_format_same_calendar_mv1(const DateTimeFormatter* self, const Date* date, const Time* time, DiplomatWrite* write); void icu4x_DateTimeFormatter_destroy_mv1(DateTimeFormatter* self); diff --git a/ffi/capi/bindings/c/DateTimeFormatterGregorian.d.h b/ffi/capi/bindings/c/DateTimeFormatterGregorian.d.h new file mode 100644 index 00000000000..a9c2877e29c --- /dev/null +++ b/ffi/capi/bindings/c/DateTimeFormatterGregorian.d.h @@ -0,0 +1,19 @@ +#ifndef DateTimeFormatterGregorian_D_H +#define DateTimeFormatterGregorian_D_H + +#include +#include +#include +#include +#include "diplomat_runtime.h" + + + + + +typedef struct DateTimeFormatterGregorian DateTimeFormatterGregorian; + + + + +#endif // DateTimeFormatterGregorian_D_H diff --git a/ffi/capi/bindings/c/DateTimeFormatterGregorian.h b/ffi/capi/bindings/c/DateTimeFormatterGregorian.h new file mode 100644 index 00000000000..a9740bb054c --- /dev/null +++ b/ffi/capi/bindings/c/DateTimeFormatterGregorian.h @@ -0,0 +1,78 @@ +#ifndef DateTimeFormatterGregorian_H +#define DateTimeFormatterGregorian_H + +#include +#include +#include +#include +#include "diplomat_runtime.h" + +#include "DataProvider.d.h" +#include "DateTimeAlignment.d.h" +#include "DateTimeFormatterLoadError.d.h" +#include "DateTimeLength.d.h" +#include "IsoDate.d.h" +#include "Locale.d.h" +#include "Time.d.h" +#include "TimePrecision.d.h" +#include "YearStyle.d.h" + +#include "DateTimeFormatterGregorian.d.h" + + + + + + +typedef struct icu4x_DateTimeFormatterGregorian_create_dt_mv1_result {union {DateTimeFormatterGregorian* ok; DateTimeFormatterLoadError err;}; bool is_ok;} icu4x_DateTimeFormatterGregorian_create_dt_mv1_result; +icu4x_DateTimeFormatterGregorian_create_dt_mv1_result icu4x_DateTimeFormatterGregorian_create_dt_mv1(const Locale* locale, DateTimeLength_option length, TimePrecision_option time_precision, DateTimeAlignment_option alignment); + +typedef struct icu4x_DateTimeFormatterGregorian_create_dt_with_provider_mv1_result {union {DateTimeFormatterGregorian* ok; DateTimeFormatterLoadError err;}; bool is_ok;} icu4x_DateTimeFormatterGregorian_create_dt_with_provider_mv1_result; +icu4x_DateTimeFormatterGregorian_create_dt_with_provider_mv1_result icu4x_DateTimeFormatterGregorian_create_dt_with_provider_mv1(const DataProvider* provider, const Locale* locale, DateTimeLength_option length, TimePrecision_option time_precision, DateTimeAlignment_option alignment); + +typedef struct icu4x_DateTimeFormatterGregorian_create_mdt_mv1_result {union {DateTimeFormatterGregorian* ok; DateTimeFormatterLoadError err;}; bool is_ok;} icu4x_DateTimeFormatterGregorian_create_mdt_mv1_result; +icu4x_DateTimeFormatterGregorian_create_mdt_mv1_result icu4x_DateTimeFormatterGregorian_create_mdt_mv1(const Locale* locale, DateTimeLength_option length, TimePrecision_option time_precision, DateTimeAlignment_option alignment); + +typedef struct icu4x_DateTimeFormatterGregorian_create_mdt_with_provider_mv1_result {union {DateTimeFormatterGregorian* ok; DateTimeFormatterLoadError err;}; bool is_ok;} icu4x_DateTimeFormatterGregorian_create_mdt_with_provider_mv1_result; +icu4x_DateTimeFormatterGregorian_create_mdt_with_provider_mv1_result icu4x_DateTimeFormatterGregorian_create_mdt_with_provider_mv1(const DataProvider* provider, const Locale* locale, DateTimeLength_option length, TimePrecision_option time_precision, DateTimeAlignment_option alignment); + +typedef struct icu4x_DateTimeFormatterGregorian_create_ymdt_mv1_result {union {DateTimeFormatterGregorian* ok; DateTimeFormatterLoadError err;}; bool is_ok;} icu4x_DateTimeFormatterGregorian_create_ymdt_mv1_result; +icu4x_DateTimeFormatterGregorian_create_ymdt_mv1_result icu4x_DateTimeFormatterGregorian_create_ymdt_mv1(const Locale* locale, DateTimeLength_option length, TimePrecision_option time_precision, DateTimeAlignment_option alignment, YearStyle_option year_style); + +typedef struct icu4x_DateTimeFormatterGregorian_create_ymdt_with_provider_mv1_result {union {DateTimeFormatterGregorian* ok; DateTimeFormatterLoadError err;}; bool is_ok;} icu4x_DateTimeFormatterGregorian_create_ymdt_with_provider_mv1_result; +icu4x_DateTimeFormatterGregorian_create_ymdt_with_provider_mv1_result icu4x_DateTimeFormatterGregorian_create_ymdt_with_provider_mv1(const DataProvider* provider, const Locale* locale, DateTimeLength_option length, TimePrecision_option time_precision, DateTimeAlignment_option alignment, YearStyle_option year_style); + +typedef struct icu4x_DateTimeFormatterGregorian_create_det_mv1_result {union {DateTimeFormatterGregorian* ok; DateTimeFormatterLoadError err;}; bool is_ok;} icu4x_DateTimeFormatterGregorian_create_det_mv1_result; +icu4x_DateTimeFormatterGregorian_create_det_mv1_result icu4x_DateTimeFormatterGregorian_create_det_mv1(const Locale* locale, DateTimeLength_option length, TimePrecision_option time_precision, DateTimeAlignment_option alignment); + +typedef struct icu4x_DateTimeFormatterGregorian_create_det_with_provider_mv1_result {union {DateTimeFormatterGregorian* ok; DateTimeFormatterLoadError err;}; bool is_ok;} icu4x_DateTimeFormatterGregorian_create_det_with_provider_mv1_result; +icu4x_DateTimeFormatterGregorian_create_det_with_provider_mv1_result icu4x_DateTimeFormatterGregorian_create_det_with_provider_mv1(const DataProvider* provider, const Locale* locale, DateTimeLength_option length, TimePrecision_option time_precision, DateTimeAlignment_option alignment); + +typedef struct icu4x_DateTimeFormatterGregorian_create_mdet_mv1_result {union {DateTimeFormatterGregorian* ok; DateTimeFormatterLoadError err;}; bool is_ok;} icu4x_DateTimeFormatterGregorian_create_mdet_mv1_result; +icu4x_DateTimeFormatterGregorian_create_mdet_mv1_result icu4x_DateTimeFormatterGregorian_create_mdet_mv1(const Locale* locale, DateTimeLength_option length, TimePrecision_option time_precision, DateTimeAlignment_option alignment); + +typedef struct icu4x_DateTimeFormatterGregorian_create_mdet_with_provider_mv1_result {union {DateTimeFormatterGregorian* ok; DateTimeFormatterLoadError err;}; bool is_ok;} icu4x_DateTimeFormatterGregorian_create_mdet_with_provider_mv1_result; +icu4x_DateTimeFormatterGregorian_create_mdet_with_provider_mv1_result icu4x_DateTimeFormatterGregorian_create_mdet_with_provider_mv1(const DataProvider* provider, const Locale* locale, DateTimeLength_option length, TimePrecision_option time_precision, DateTimeAlignment_option alignment); + +typedef struct icu4x_DateTimeFormatterGregorian_create_ymdet_mv1_result {union {DateTimeFormatterGregorian* ok; DateTimeFormatterLoadError err;}; bool is_ok;} icu4x_DateTimeFormatterGregorian_create_ymdet_mv1_result; +icu4x_DateTimeFormatterGregorian_create_ymdet_mv1_result icu4x_DateTimeFormatterGregorian_create_ymdet_mv1(const Locale* locale, DateTimeLength_option length, TimePrecision_option time_precision, DateTimeAlignment_option alignment, YearStyle_option year_style); + +typedef struct icu4x_DateTimeFormatterGregorian_create_ymdet_with_provider_mv1_result {union {DateTimeFormatterGregorian* ok; DateTimeFormatterLoadError err;}; bool is_ok;} icu4x_DateTimeFormatterGregorian_create_ymdet_with_provider_mv1_result; +icu4x_DateTimeFormatterGregorian_create_ymdet_with_provider_mv1_result icu4x_DateTimeFormatterGregorian_create_ymdet_with_provider_mv1(const DataProvider* provider, const Locale* locale, DateTimeLength_option length, TimePrecision_option time_precision, DateTimeAlignment_option alignment, YearStyle_option year_style); + +typedef struct icu4x_DateTimeFormatterGregorian_create_et_mv1_result {union {DateTimeFormatterGregorian* ok; DateTimeFormatterLoadError err;}; bool is_ok;} icu4x_DateTimeFormatterGregorian_create_et_mv1_result; +icu4x_DateTimeFormatterGregorian_create_et_mv1_result icu4x_DateTimeFormatterGregorian_create_et_mv1(const Locale* locale, DateTimeLength_option length, TimePrecision_option time_precision, DateTimeAlignment_option alignment); + +typedef struct icu4x_DateTimeFormatterGregorian_create_et_with_provider_mv1_result {union {DateTimeFormatterGregorian* ok; DateTimeFormatterLoadError err;}; bool is_ok;} icu4x_DateTimeFormatterGregorian_create_et_with_provider_mv1_result; +icu4x_DateTimeFormatterGregorian_create_et_with_provider_mv1_result icu4x_DateTimeFormatterGregorian_create_et_with_provider_mv1(const DataProvider* provider, const Locale* locale, DateTimeLength_option length, TimePrecision_option time_precision, DateTimeAlignment_option alignment); + +void icu4x_DateTimeFormatterGregorian_format_iso_mv1(const DateTimeFormatterGregorian* self, const IsoDate* date, const Time* time, DiplomatWrite* write); + + +void icu4x_DateTimeFormatterGregorian_destroy_mv1(DateTimeFormatterGregorian* self); + + + + + +#endif // DateTimeFormatterGregorian_H diff --git a/ffi/capi/bindings/c/DateTimeMismatchedCalendarError.d.h b/ffi/capi/bindings/c/DateTimeMismatchedCalendarError.d.h new file mode 100644 index 00000000000..c33599a6253 --- /dev/null +++ b/ffi/capi/bindings/c/DateTimeMismatchedCalendarError.d.h @@ -0,0 +1,24 @@ +#ifndef DateTimeMismatchedCalendarError_D_H +#define DateTimeMismatchedCalendarError_D_H + +#include +#include +#include +#include +#include "diplomat_runtime.h" + +#include "AnyCalendarKind.d.h" + + + + +typedef struct DateTimeMismatchedCalendarError { + AnyCalendarKind this_kind; + AnyCalendarKind_option date_kind; +} DateTimeMismatchedCalendarError; + +typedef struct DateTimeMismatchedCalendarError_option {union { DateTimeMismatchedCalendarError ok; }; bool is_ok; } DateTimeMismatchedCalendarError_option; + + + +#endif // DateTimeMismatchedCalendarError_D_H diff --git a/ffi/capi/bindings/c/DateTimeMismatchedCalendarError.h b/ffi/capi/bindings/c/DateTimeMismatchedCalendarError.h new file mode 100644 index 00000000000..99c2b23319a --- /dev/null +++ b/ffi/capi/bindings/c/DateTimeMismatchedCalendarError.h @@ -0,0 +1,23 @@ +#ifndef DateTimeMismatchedCalendarError_H +#define DateTimeMismatchedCalendarError_H + +#include +#include +#include +#include +#include "diplomat_runtime.h" + + +#include "DateTimeMismatchedCalendarError.d.h" + + + + + + + + + + + +#endif // DateTimeMismatchedCalendarError_H diff --git a/ffi/capi/bindings/c/GregorianDateTimeFormatter.d.h b/ffi/capi/bindings/c/GregorianDateTimeFormatter.d.h deleted file mode 100644 index ccf2adfc31d..00000000000 --- a/ffi/capi/bindings/c/GregorianDateTimeFormatter.d.h +++ /dev/null @@ -1,19 +0,0 @@ -#ifndef GregorianDateTimeFormatter_D_H -#define GregorianDateTimeFormatter_D_H - -#include -#include -#include -#include -#include "diplomat_runtime.h" - - - - - -typedef struct GregorianDateTimeFormatter GregorianDateTimeFormatter; - - - - -#endif // GregorianDateTimeFormatter_D_H diff --git a/ffi/capi/bindings/c/GregorianDateTimeFormatter.h b/ffi/capi/bindings/c/GregorianDateTimeFormatter.h deleted file mode 100644 index 8a9f3f6b3c2..00000000000 --- a/ffi/capi/bindings/c/GregorianDateTimeFormatter.h +++ /dev/null @@ -1,39 +0,0 @@ -#ifndef GregorianDateTimeFormatter_H -#define GregorianDateTimeFormatter_H - -#include -#include -#include -#include -#include "diplomat_runtime.h" - -#include "DataProvider.d.h" -#include "DateTimeFormatterLoadError.d.h" -#include "DateTimeLength.d.h" -#include "IsoDate.d.h" -#include "Locale.d.h" -#include "Time.d.h" - -#include "GregorianDateTimeFormatter.d.h" - - - - - - -typedef struct icu4x_GregorianDateTimeFormatter_create_with_length_mv1_result {union {GregorianDateTimeFormatter* ok; DateTimeFormatterLoadError err;}; bool is_ok;} icu4x_GregorianDateTimeFormatter_create_with_length_mv1_result; -icu4x_GregorianDateTimeFormatter_create_with_length_mv1_result icu4x_GregorianDateTimeFormatter_create_with_length_mv1(const Locale* locale, DateTimeLength length); - -typedef struct icu4x_GregorianDateTimeFormatter_create_with_length_and_provider_mv1_result {union {GregorianDateTimeFormatter* ok; DateTimeFormatterLoadError err;}; bool is_ok;} icu4x_GregorianDateTimeFormatter_create_with_length_and_provider_mv1_result; -icu4x_GregorianDateTimeFormatter_create_with_length_and_provider_mv1_result icu4x_GregorianDateTimeFormatter_create_with_length_and_provider_mv1(const DataProvider* provider, const Locale* locale, DateTimeLength length); - -void icu4x_GregorianDateTimeFormatter_format_iso_mv1(const GregorianDateTimeFormatter* self, const IsoDate* date, const Time* time, DiplomatWrite* write); - - -void icu4x_GregorianDateTimeFormatter_destroy_mv1(GregorianDateTimeFormatter* self); - - - - - -#endif // GregorianDateTimeFormatter_H diff --git a/ffi/capi/bindings/c/TimePrecision.d.h b/ffi/capi/bindings/c/TimePrecision.d.h new file mode 100644 index 00000000000..4b2e8df74f6 --- /dev/null +++ b/ffi/capi/bindings/c/TimePrecision.d.h @@ -0,0 +1,34 @@ +#ifndef TimePrecision_D_H +#define TimePrecision_D_H + +#include +#include +#include +#include +#include "diplomat_runtime.h" + + + + + +typedef enum TimePrecision { + TimePrecision_Hour = 0, + TimePrecision_Minute = 1, + TimePrecision_MinuteOptional = 2, + TimePrecision_Second = 3, + TimePrecision_SecondF1 = 4, + TimePrecision_SecondF2 = 5, + TimePrecision_SecondF3 = 6, + TimePrecision_SecondF4 = 7, + TimePrecision_SecondF5 = 8, + TimePrecision_SecondF6 = 9, + TimePrecision_SecondF7 = 10, + TimePrecision_SecondF8 = 11, + TimePrecision_SecondF9 = 12, +} TimePrecision; + +typedef struct TimePrecision_option {union { TimePrecision ok; }; bool is_ok; } TimePrecision_option; + + + +#endif // TimePrecision_D_H diff --git a/ffi/capi/bindings/c/TimePrecision.h b/ffi/capi/bindings/c/TimePrecision.h new file mode 100644 index 00000000000..9cf06363755 --- /dev/null +++ b/ffi/capi/bindings/c/TimePrecision.h @@ -0,0 +1,23 @@ +#ifndef TimePrecision_H +#define TimePrecision_H + +#include +#include +#include +#include +#include "diplomat_runtime.h" + + +#include "TimePrecision.d.h" + + + + + + + + + + + +#endif // TimePrecision_H diff --git a/ffi/capi/bindings/c/YearStyle.d.h b/ffi/capi/bindings/c/YearStyle.d.h new file mode 100644 index 00000000000..3ca3bcb857b --- /dev/null +++ b/ffi/capi/bindings/c/YearStyle.d.h @@ -0,0 +1,24 @@ +#ifndef YearStyle_D_H +#define YearStyle_D_H + +#include +#include +#include +#include +#include "diplomat_runtime.h" + + + + + +typedef enum YearStyle { + YearStyle_Auto = 0, + YearStyle_Full = 1, + YearStyle_WithEra = 2, +} YearStyle; + +typedef struct YearStyle_option {union { YearStyle ok; }; bool is_ok; } YearStyle_option; + + + +#endif // YearStyle_D_H diff --git a/ffi/capi/bindings/c/YearStyle.h b/ffi/capi/bindings/c/YearStyle.h new file mode 100644 index 00000000000..21ce8a6a8f3 --- /dev/null +++ b/ffi/capi/bindings/c/YearStyle.h @@ -0,0 +1,23 @@ +#ifndef YearStyle_H +#define YearStyle_H + +#include +#include +#include +#include +#include "diplomat_runtime.h" + + +#include "YearStyle.d.h" + + + + + + + + + + + +#endif // YearStyle_H diff --git a/ffi/capi/bindings/cpp/icu4x/DateTimeAlignment.d.hpp b/ffi/capi/bindings/cpp/icu4x/DateTimeAlignment.d.hpp new file mode 100644 index 00000000000..d1206545af6 --- /dev/null +++ b/ffi/capi/bindings/cpp/icu4x/DateTimeAlignment.d.hpp @@ -0,0 +1,47 @@ +#ifndef icu4x_DateTimeAlignment_D_HPP +#define icu4x_DateTimeAlignment_D_HPP + +#include +#include +#include +#include +#include +#include +#include +#include "../diplomat_runtime.hpp" + + +namespace icu4x { +namespace capi { + enum DateTimeAlignment { + DateTimeAlignment_Auto = 0, + DateTimeAlignment_Column = 1, + }; + + typedef struct DateTimeAlignment_option {union { DateTimeAlignment ok; }; bool is_ok; } DateTimeAlignment_option; +} // namespace capi +} // namespace + +namespace icu4x { +class DateTimeAlignment { +public: + enum Value { + Auto = 0, + Column = 1, + }; + + DateTimeAlignment() = default; + // Implicit conversions between enum and ::Value + constexpr DateTimeAlignment(Value v) : value(v) {} + constexpr operator Value() const { return value; } + // Prevent usage as boolean value + explicit operator bool() const = delete; + + inline icu4x::capi::DateTimeAlignment AsFFI() const; + inline static icu4x::DateTimeAlignment FromFFI(icu4x::capi::DateTimeAlignment c_enum); +private: + Value value; +}; + +} // namespace +#endif // icu4x_DateTimeAlignment_D_HPP diff --git a/ffi/capi/bindings/cpp/icu4x/DateTimeAlignment.hpp b/ffi/capi/bindings/cpp/icu4x/DateTimeAlignment.hpp new file mode 100644 index 00000000000..d5293b149ce --- /dev/null +++ b/ffi/capi/bindings/cpp/icu4x/DateTimeAlignment.hpp @@ -0,0 +1,38 @@ +#ifndef icu4x_DateTimeAlignment_HPP +#define icu4x_DateTimeAlignment_HPP + +#include "DateTimeAlignment.d.hpp" + +#include +#include +#include +#include +#include +#include +#include +#include "../diplomat_runtime.hpp" + + +namespace icu4x { +namespace capi { + extern "C" { + + + } // extern "C" +} // namespace capi +} // namespace + +inline icu4x::capi::DateTimeAlignment icu4x::DateTimeAlignment::AsFFI() const { + return static_cast(value); +} + +inline icu4x::DateTimeAlignment icu4x::DateTimeAlignment::FromFFI(icu4x::capi::DateTimeAlignment c_enum) { + switch (c_enum) { + case icu4x::capi::DateTimeAlignment_Auto: + case icu4x::capi::DateTimeAlignment_Column: + return static_cast(c_enum); + default: + abort(); + } +} +#endif // icu4x_DateTimeAlignment_HPP diff --git a/ffi/capi/bindings/cpp/icu4x/DateTimeFormatter.d.hpp b/ffi/capi/bindings/cpp/icu4x/DateTimeFormatter.d.hpp index 9cd2d6fc0f7..e342ad76dbb 100644 --- a/ffi/capi/bindings/cpp/icu4x/DateTimeFormatter.d.hpp +++ b/ffi/capi/bindings/cpp/icu4x/DateTimeFormatter.d.hpp @@ -11,8 +11,6 @@ #include "../diplomat_runtime.hpp" namespace icu4x { -namespace capi { struct Calendar; } -class Calendar; namespace capi { struct DataProvider; } class DataProvider; namespace capi { struct Date; } @@ -25,9 +23,12 @@ namespace capi { struct Locale; } class Locale; namespace capi { struct Time; } class Time; -class DateTimeFormatError; +struct DateTimeMismatchedCalendarError; +class DateTimeAlignment; class DateTimeFormatterLoadError; class DateTimeLength; +class TimePrecision; +class YearStyle; } @@ -41,15 +42,37 @@ namespace icu4x { class DateTimeFormatter { public: - inline static diplomat::result, icu4x::DateTimeFormatterLoadError> create_with_length(const icu4x::Locale& locale, icu4x::DateTimeLength length); + inline static diplomat::result, icu4x::DateTimeFormatterLoadError> create_dt(const icu4x::Locale& locale, std::optional length, std::optional time_precision, std::optional alignment); - inline static diplomat::result, icu4x::DateTimeFormatterLoadError> create_with_length_and_provider(const icu4x::DataProvider& provider, const icu4x::Locale& locale, icu4x::DateTimeLength length); + inline static diplomat::result, icu4x::DateTimeFormatterLoadError> create_dt_with_provider(const icu4x::DataProvider& provider, const icu4x::Locale& locale, std::optional length, std::optional time_precision, std::optional alignment); - inline diplomat::result format(const icu4x::Date& date, const icu4x::Time& time) const; + inline static diplomat::result, icu4x::DateTimeFormatterLoadError> create_mdt(const icu4x::Locale& locale, std::optional length, std::optional time_precision, std::optional alignment); - inline diplomat::result format_iso(const icu4x::IsoDate& date, const icu4x::Time& time) const; + inline static diplomat::result, icu4x::DateTimeFormatterLoadError> create_mdt_with_provider(const icu4x::DataProvider& provider, const icu4x::Locale& locale, std::optional length, std::optional time_precision, std::optional alignment); - inline std::unique_ptr calendar() const; + inline static diplomat::result, icu4x::DateTimeFormatterLoadError> create_ymdt(const icu4x::Locale& locale, std::optional length, std::optional time_precision, std::optional alignment, std::optional year_style); + + inline static diplomat::result, icu4x::DateTimeFormatterLoadError> create_ymdt_with_provider(const icu4x::DataProvider& provider, const icu4x::Locale& locale, std::optional length, std::optional time_precision, std::optional alignment, std::optional year_style); + + inline static diplomat::result, icu4x::DateTimeFormatterLoadError> create_det(const icu4x::Locale& locale, std::optional length, std::optional time_precision, std::optional alignment); + + inline static diplomat::result, icu4x::DateTimeFormatterLoadError> create_det_with_provider(const icu4x::DataProvider& provider, const icu4x::Locale& locale, std::optional length, std::optional time_precision, std::optional alignment); + + inline static diplomat::result, icu4x::DateTimeFormatterLoadError> create_mdet(const icu4x::Locale& locale, std::optional length, std::optional time_precision, std::optional alignment); + + inline static diplomat::result, icu4x::DateTimeFormatterLoadError> create_mdet_with_provider(const icu4x::DataProvider& provider, const icu4x::Locale& locale, std::optional length, std::optional time_precision, std::optional alignment); + + inline static diplomat::result, icu4x::DateTimeFormatterLoadError> create_ymdet(const icu4x::Locale& locale, std::optional length, std::optional time_precision, std::optional alignment, std::optional year_style); + + inline static diplomat::result, icu4x::DateTimeFormatterLoadError> create_ymdet_with_provider(const icu4x::DataProvider& provider, const icu4x::Locale& locale, std::optional length, std::optional time_precision, std::optional alignment, std::optional year_style); + + inline static diplomat::result, icu4x::DateTimeFormatterLoadError> create_et(const icu4x::Locale& locale, std::optional length, std::optional time_precision, std::optional alignment); + + inline static diplomat::result, icu4x::DateTimeFormatterLoadError> create_et_with_provider(const icu4x::DataProvider& provider, const icu4x::Locale& locale, std::optional length, std::optional time_precision, std::optional alignment); + + inline std::string format_iso(const icu4x::IsoDate& date, const icu4x::Time& time) const; + + inline diplomat::result format_same_calendar(const icu4x::Date& date, const icu4x::Time& time) const; inline const icu4x::capi::DateTimeFormatter* AsFFI() const; inline icu4x::capi::DateTimeFormatter* AsFFI(); diff --git a/ffi/capi/bindings/cpp/icu4x/DateTimeFormatter.hpp b/ffi/capi/bindings/cpp/icu4x/DateTimeFormatter.hpp index 893c35be563..07f600ad6ed 100644 --- a/ffi/capi/bindings/cpp/icu4x/DateTimeFormatter.hpp +++ b/ffi/capi/bindings/cpp/icu4x/DateTimeFormatter.hpp @@ -11,34 +11,69 @@ #include #include #include "../diplomat_runtime.hpp" -#include "Calendar.hpp" #include "DataProvider.hpp" #include "Date.hpp" -#include "DateTimeFormatError.hpp" +#include "DateTimeAlignment.hpp" #include "DateTimeFormatterLoadError.hpp" #include "DateTimeLength.hpp" +#include "DateTimeMismatchedCalendarError.hpp" #include "IsoDate.hpp" #include "Locale.hpp" #include "Time.hpp" +#include "TimePrecision.hpp" +#include "YearStyle.hpp" namespace icu4x { namespace capi { extern "C" { - typedef struct icu4x_DateTimeFormatter_create_with_length_mv1_result {union {icu4x::capi::DateTimeFormatter* ok; icu4x::capi::DateTimeFormatterLoadError err;}; bool is_ok;} icu4x_DateTimeFormatter_create_with_length_mv1_result; - icu4x_DateTimeFormatter_create_with_length_mv1_result icu4x_DateTimeFormatter_create_with_length_mv1(const icu4x::capi::Locale* locale, icu4x::capi::DateTimeLength length); + typedef struct icu4x_DateTimeFormatter_create_dt_mv1_result {union {icu4x::capi::DateTimeFormatter* ok; icu4x::capi::DateTimeFormatterLoadError err;}; bool is_ok;} icu4x_DateTimeFormatter_create_dt_mv1_result; + icu4x_DateTimeFormatter_create_dt_mv1_result icu4x_DateTimeFormatter_create_dt_mv1(const icu4x::capi::Locale* locale, icu4x::capi::DateTimeLength_option length, icu4x::capi::TimePrecision_option time_precision, icu4x::capi::DateTimeAlignment_option alignment); - typedef struct icu4x_DateTimeFormatter_create_with_length_and_provider_mv1_result {union {icu4x::capi::DateTimeFormatter* ok; icu4x::capi::DateTimeFormatterLoadError err;}; bool is_ok;} icu4x_DateTimeFormatter_create_with_length_and_provider_mv1_result; - icu4x_DateTimeFormatter_create_with_length_and_provider_mv1_result icu4x_DateTimeFormatter_create_with_length_and_provider_mv1(const icu4x::capi::DataProvider* provider, const icu4x::capi::Locale* locale, icu4x::capi::DateTimeLength length); + typedef struct icu4x_DateTimeFormatter_create_dt_with_provider_mv1_result {union {icu4x::capi::DateTimeFormatter* ok; icu4x::capi::DateTimeFormatterLoadError err;}; bool is_ok;} icu4x_DateTimeFormatter_create_dt_with_provider_mv1_result; + icu4x_DateTimeFormatter_create_dt_with_provider_mv1_result icu4x_DateTimeFormatter_create_dt_with_provider_mv1(const icu4x::capi::DataProvider* provider, const icu4x::capi::Locale* locale, icu4x::capi::DateTimeLength_option length, icu4x::capi::TimePrecision_option time_precision, icu4x::capi::DateTimeAlignment_option alignment); - typedef struct icu4x_DateTimeFormatter_format_mv1_result {union { icu4x::capi::DateTimeFormatError err;}; bool is_ok;} icu4x_DateTimeFormatter_format_mv1_result; - icu4x_DateTimeFormatter_format_mv1_result icu4x_DateTimeFormatter_format_mv1(const icu4x::capi::DateTimeFormatter* self, const icu4x::capi::Date* date, const icu4x::capi::Time* time, diplomat::capi::DiplomatWrite* write); + typedef struct icu4x_DateTimeFormatter_create_mdt_mv1_result {union {icu4x::capi::DateTimeFormatter* ok; icu4x::capi::DateTimeFormatterLoadError err;}; bool is_ok;} icu4x_DateTimeFormatter_create_mdt_mv1_result; + icu4x_DateTimeFormatter_create_mdt_mv1_result icu4x_DateTimeFormatter_create_mdt_mv1(const icu4x::capi::Locale* locale, icu4x::capi::DateTimeLength_option length, icu4x::capi::TimePrecision_option time_precision, icu4x::capi::DateTimeAlignment_option alignment); - typedef struct icu4x_DateTimeFormatter_format_iso_mv1_result {union { icu4x::capi::DateTimeFormatError err;}; bool is_ok;} icu4x_DateTimeFormatter_format_iso_mv1_result; - icu4x_DateTimeFormatter_format_iso_mv1_result icu4x_DateTimeFormatter_format_iso_mv1(const icu4x::capi::DateTimeFormatter* self, const icu4x::capi::IsoDate* date, const icu4x::capi::Time* time, diplomat::capi::DiplomatWrite* write); + typedef struct icu4x_DateTimeFormatter_create_mdt_with_provider_mv1_result {union {icu4x::capi::DateTimeFormatter* ok; icu4x::capi::DateTimeFormatterLoadError err;}; bool is_ok;} icu4x_DateTimeFormatter_create_mdt_with_provider_mv1_result; + icu4x_DateTimeFormatter_create_mdt_with_provider_mv1_result icu4x_DateTimeFormatter_create_mdt_with_provider_mv1(const icu4x::capi::DataProvider* provider, const icu4x::capi::Locale* locale, icu4x::capi::DateTimeLength_option length, icu4x::capi::TimePrecision_option time_precision, icu4x::capi::DateTimeAlignment_option alignment); - icu4x::capi::Calendar* icu4x_DateTimeFormatter_calendar_mv1(const icu4x::capi::DateTimeFormatter* self); + typedef struct icu4x_DateTimeFormatter_create_ymdt_mv1_result {union {icu4x::capi::DateTimeFormatter* ok; icu4x::capi::DateTimeFormatterLoadError err;}; bool is_ok;} icu4x_DateTimeFormatter_create_ymdt_mv1_result; + icu4x_DateTimeFormatter_create_ymdt_mv1_result icu4x_DateTimeFormatter_create_ymdt_mv1(const icu4x::capi::Locale* locale, icu4x::capi::DateTimeLength_option length, icu4x::capi::TimePrecision_option time_precision, icu4x::capi::DateTimeAlignment_option alignment, icu4x::capi::YearStyle_option year_style); + + typedef struct icu4x_DateTimeFormatter_create_ymdt_with_provider_mv1_result {union {icu4x::capi::DateTimeFormatter* ok; icu4x::capi::DateTimeFormatterLoadError err;}; bool is_ok;} icu4x_DateTimeFormatter_create_ymdt_with_provider_mv1_result; + icu4x_DateTimeFormatter_create_ymdt_with_provider_mv1_result icu4x_DateTimeFormatter_create_ymdt_with_provider_mv1(const icu4x::capi::DataProvider* provider, const icu4x::capi::Locale* locale, icu4x::capi::DateTimeLength_option length, icu4x::capi::TimePrecision_option time_precision, icu4x::capi::DateTimeAlignment_option alignment, icu4x::capi::YearStyle_option year_style); + + typedef struct icu4x_DateTimeFormatter_create_det_mv1_result {union {icu4x::capi::DateTimeFormatter* ok; icu4x::capi::DateTimeFormatterLoadError err;}; bool is_ok;} icu4x_DateTimeFormatter_create_det_mv1_result; + icu4x_DateTimeFormatter_create_det_mv1_result icu4x_DateTimeFormatter_create_det_mv1(const icu4x::capi::Locale* locale, icu4x::capi::DateTimeLength_option length, icu4x::capi::TimePrecision_option time_precision, icu4x::capi::DateTimeAlignment_option alignment); + + typedef struct icu4x_DateTimeFormatter_create_det_with_provider_mv1_result {union {icu4x::capi::DateTimeFormatter* ok; icu4x::capi::DateTimeFormatterLoadError err;}; bool is_ok;} icu4x_DateTimeFormatter_create_det_with_provider_mv1_result; + icu4x_DateTimeFormatter_create_det_with_provider_mv1_result icu4x_DateTimeFormatter_create_det_with_provider_mv1(const icu4x::capi::DataProvider* provider, const icu4x::capi::Locale* locale, icu4x::capi::DateTimeLength_option length, icu4x::capi::TimePrecision_option time_precision, icu4x::capi::DateTimeAlignment_option alignment); + + typedef struct icu4x_DateTimeFormatter_create_mdet_mv1_result {union {icu4x::capi::DateTimeFormatter* ok; icu4x::capi::DateTimeFormatterLoadError err;}; bool is_ok;} icu4x_DateTimeFormatter_create_mdet_mv1_result; + icu4x_DateTimeFormatter_create_mdet_mv1_result icu4x_DateTimeFormatter_create_mdet_mv1(const icu4x::capi::Locale* locale, icu4x::capi::DateTimeLength_option length, icu4x::capi::TimePrecision_option time_precision, icu4x::capi::DateTimeAlignment_option alignment); + + typedef struct icu4x_DateTimeFormatter_create_mdet_with_provider_mv1_result {union {icu4x::capi::DateTimeFormatter* ok; icu4x::capi::DateTimeFormatterLoadError err;}; bool is_ok;} icu4x_DateTimeFormatter_create_mdet_with_provider_mv1_result; + icu4x_DateTimeFormatter_create_mdet_with_provider_mv1_result icu4x_DateTimeFormatter_create_mdet_with_provider_mv1(const icu4x::capi::DataProvider* provider, const icu4x::capi::Locale* locale, icu4x::capi::DateTimeLength_option length, icu4x::capi::TimePrecision_option time_precision, icu4x::capi::DateTimeAlignment_option alignment); + + typedef struct icu4x_DateTimeFormatter_create_ymdet_mv1_result {union {icu4x::capi::DateTimeFormatter* ok; icu4x::capi::DateTimeFormatterLoadError err;}; bool is_ok;} icu4x_DateTimeFormatter_create_ymdet_mv1_result; + icu4x_DateTimeFormatter_create_ymdet_mv1_result icu4x_DateTimeFormatter_create_ymdet_mv1(const icu4x::capi::Locale* locale, icu4x::capi::DateTimeLength_option length, icu4x::capi::TimePrecision_option time_precision, icu4x::capi::DateTimeAlignment_option alignment, icu4x::capi::YearStyle_option year_style); + + typedef struct icu4x_DateTimeFormatter_create_ymdet_with_provider_mv1_result {union {icu4x::capi::DateTimeFormatter* ok; icu4x::capi::DateTimeFormatterLoadError err;}; bool is_ok;} icu4x_DateTimeFormatter_create_ymdet_with_provider_mv1_result; + icu4x_DateTimeFormatter_create_ymdet_with_provider_mv1_result icu4x_DateTimeFormatter_create_ymdet_with_provider_mv1(const icu4x::capi::DataProvider* provider, const icu4x::capi::Locale* locale, icu4x::capi::DateTimeLength_option length, icu4x::capi::TimePrecision_option time_precision, icu4x::capi::DateTimeAlignment_option alignment, icu4x::capi::YearStyle_option year_style); + + typedef struct icu4x_DateTimeFormatter_create_et_mv1_result {union {icu4x::capi::DateTimeFormatter* ok; icu4x::capi::DateTimeFormatterLoadError err;}; bool is_ok;} icu4x_DateTimeFormatter_create_et_mv1_result; + icu4x_DateTimeFormatter_create_et_mv1_result icu4x_DateTimeFormatter_create_et_mv1(const icu4x::capi::Locale* locale, icu4x::capi::DateTimeLength_option length, icu4x::capi::TimePrecision_option time_precision, icu4x::capi::DateTimeAlignment_option alignment); + + typedef struct icu4x_DateTimeFormatter_create_et_with_provider_mv1_result {union {icu4x::capi::DateTimeFormatter* ok; icu4x::capi::DateTimeFormatterLoadError err;}; bool is_ok;} icu4x_DateTimeFormatter_create_et_with_provider_mv1_result; + icu4x_DateTimeFormatter_create_et_with_provider_mv1_result icu4x_DateTimeFormatter_create_et_with_provider_mv1(const icu4x::capi::DataProvider* provider, const icu4x::capi::Locale* locale, icu4x::capi::DateTimeLength_option length, icu4x::capi::TimePrecision_option time_precision, icu4x::capi::DateTimeAlignment_option alignment); + + void icu4x_DateTimeFormatter_format_iso_mv1(const icu4x::capi::DateTimeFormatter* self, const icu4x::capi::IsoDate* date, const icu4x::capi::Time* time, diplomat::capi::DiplomatWrite* write); + + typedef struct icu4x_DateTimeFormatter_format_same_calendar_mv1_result {union { icu4x::capi::DateTimeMismatchedCalendarError err;}; bool is_ok;} icu4x_DateTimeFormatter_format_same_calendar_mv1_result; + icu4x_DateTimeFormatter_format_same_calendar_mv1_result icu4x_DateTimeFormatter_format_same_calendar_mv1(const icu4x::capi::DateTimeFormatter* self, const icu4x::capi::Date* date, const icu4x::capi::Time* time, diplomat::capi::DiplomatWrite* write); void icu4x_DateTimeFormatter_destroy_mv1(DateTimeFormatter* self); @@ -47,42 +82,147 @@ namespace capi { } // namespace capi } // namespace -inline diplomat::result, icu4x::DateTimeFormatterLoadError> icu4x::DateTimeFormatter::create_with_length(const icu4x::Locale& locale, icu4x::DateTimeLength length) { - auto result = icu4x::capi::icu4x_DateTimeFormatter_create_with_length_mv1(locale.AsFFI(), - length.AsFFI()); +inline diplomat::result, icu4x::DateTimeFormatterLoadError> icu4x::DateTimeFormatter::create_dt(const icu4x::Locale& locale, std::optional length, std::optional time_precision, std::optional alignment) { + auto result = icu4x::capi::icu4x_DateTimeFormatter_create_dt_mv1(locale.AsFFI(), + length.has_value() ? (icu4x::capi::DateTimeLength_option{ { length.value().AsFFI() }, true }) : (icu4x::capi::DateTimeLength_option{ {}, false }), + time_precision.has_value() ? (icu4x::capi::TimePrecision_option{ { time_precision.value().AsFFI() }, true }) : (icu4x::capi::TimePrecision_option{ {}, false }), + alignment.has_value() ? (icu4x::capi::DateTimeAlignment_option{ { alignment.value().AsFFI() }, true }) : (icu4x::capi::DateTimeAlignment_option{ {}, false })); + return result.is_ok ? diplomat::result, icu4x::DateTimeFormatterLoadError>(diplomat::Ok>(std::unique_ptr(icu4x::DateTimeFormatter::FromFFI(result.ok)))) : diplomat::result, icu4x::DateTimeFormatterLoadError>(diplomat::Err(icu4x::DateTimeFormatterLoadError::FromFFI(result.err))); +} + +inline diplomat::result, icu4x::DateTimeFormatterLoadError> icu4x::DateTimeFormatter::create_dt_with_provider(const icu4x::DataProvider& provider, const icu4x::Locale& locale, std::optional length, std::optional time_precision, std::optional alignment) { + auto result = icu4x::capi::icu4x_DateTimeFormatter_create_dt_with_provider_mv1(provider.AsFFI(), + locale.AsFFI(), + length.has_value() ? (icu4x::capi::DateTimeLength_option{ { length.value().AsFFI() }, true }) : (icu4x::capi::DateTimeLength_option{ {}, false }), + time_precision.has_value() ? (icu4x::capi::TimePrecision_option{ { time_precision.value().AsFFI() }, true }) : (icu4x::capi::TimePrecision_option{ {}, false }), + alignment.has_value() ? (icu4x::capi::DateTimeAlignment_option{ { alignment.value().AsFFI() }, true }) : (icu4x::capi::DateTimeAlignment_option{ {}, false })); + return result.is_ok ? diplomat::result, icu4x::DateTimeFormatterLoadError>(diplomat::Ok>(std::unique_ptr(icu4x::DateTimeFormatter::FromFFI(result.ok)))) : diplomat::result, icu4x::DateTimeFormatterLoadError>(diplomat::Err(icu4x::DateTimeFormatterLoadError::FromFFI(result.err))); +} + +inline diplomat::result, icu4x::DateTimeFormatterLoadError> icu4x::DateTimeFormatter::create_mdt(const icu4x::Locale& locale, std::optional length, std::optional time_precision, std::optional alignment) { + auto result = icu4x::capi::icu4x_DateTimeFormatter_create_mdt_mv1(locale.AsFFI(), + length.has_value() ? (icu4x::capi::DateTimeLength_option{ { length.value().AsFFI() }, true }) : (icu4x::capi::DateTimeLength_option{ {}, false }), + time_precision.has_value() ? (icu4x::capi::TimePrecision_option{ { time_precision.value().AsFFI() }, true }) : (icu4x::capi::TimePrecision_option{ {}, false }), + alignment.has_value() ? (icu4x::capi::DateTimeAlignment_option{ { alignment.value().AsFFI() }, true }) : (icu4x::capi::DateTimeAlignment_option{ {}, false })); + return result.is_ok ? diplomat::result, icu4x::DateTimeFormatterLoadError>(diplomat::Ok>(std::unique_ptr(icu4x::DateTimeFormatter::FromFFI(result.ok)))) : diplomat::result, icu4x::DateTimeFormatterLoadError>(diplomat::Err(icu4x::DateTimeFormatterLoadError::FromFFI(result.err))); +} + +inline diplomat::result, icu4x::DateTimeFormatterLoadError> icu4x::DateTimeFormatter::create_mdt_with_provider(const icu4x::DataProvider& provider, const icu4x::Locale& locale, std::optional length, std::optional time_precision, std::optional alignment) { + auto result = icu4x::capi::icu4x_DateTimeFormatter_create_mdt_with_provider_mv1(provider.AsFFI(), + locale.AsFFI(), + length.has_value() ? (icu4x::capi::DateTimeLength_option{ { length.value().AsFFI() }, true }) : (icu4x::capi::DateTimeLength_option{ {}, false }), + time_precision.has_value() ? (icu4x::capi::TimePrecision_option{ { time_precision.value().AsFFI() }, true }) : (icu4x::capi::TimePrecision_option{ {}, false }), + alignment.has_value() ? (icu4x::capi::DateTimeAlignment_option{ { alignment.value().AsFFI() }, true }) : (icu4x::capi::DateTimeAlignment_option{ {}, false })); + return result.is_ok ? diplomat::result, icu4x::DateTimeFormatterLoadError>(diplomat::Ok>(std::unique_ptr(icu4x::DateTimeFormatter::FromFFI(result.ok)))) : diplomat::result, icu4x::DateTimeFormatterLoadError>(diplomat::Err(icu4x::DateTimeFormatterLoadError::FromFFI(result.err))); +} + +inline diplomat::result, icu4x::DateTimeFormatterLoadError> icu4x::DateTimeFormatter::create_ymdt(const icu4x::Locale& locale, std::optional length, std::optional time_precision, std::optional alignment, std::optional year_style) { + auto result = icu4x::capi::icu4x_DateTimeFormatter_create_ymdt_mv1(locale.AsFFI(), + length.has_value() ? (icu4x::capi::DateTimeLength_option{ { length.value().AsFFI() }, true }) : (icu4x::capi::DateTimeLength_option{ {}, false }), + time_precision.has_value() ? (icu4x::capi::TimePrecision_option{ { time_precision.value().AsFFI() }, true }) : (icu4x::capi::TimePrecision_option{ {}, false }), + alignment.has_value() ? (icu4x::capi::DateTimeAlignment_option{ { alignment.value().AsFFI() }, true }) : (icu4x::capi::DateTimeAlignment_option{ {}, false }), + year_style.has_value() ? (icu4x::capi::YearStyle_option{ { year_style.value().AsFFI() }, true }) : (icu4x::capi::YearStyle_option{ {}, false })); return result.is_ok ? diplomat::result, icu4x::DateTimeFormatterLoadError>(diplomat::Ok>(std::unique_ptr(icu4x::DateTimeFormatter::FromFFI(result.ok)))) : diplomat::result, icu4x::DateTimeFormatterLoadError>(diplomat::Err(icu4x::DateTimeFormatterLoadError::FromFFI(result.err))); } -inline diplomat::result, icu4x::DateTimeFormatterLoadError> icu4x::DateTimeFormatter::create_with_length_and_provider(const icu4x::DataProvider& provider, const icu4x::Locale& locale, icu4x::DateTimeLength length) { - auto result = icu4x::capi::icu4x_DateTimeFormatter_create_with_length_and_provider_mv1(provider.AsFFI(), +inline diplomat::result, icu4x::DateTimeFormatterLoadError> icu4x::DateTimeFormatter::create_ymdt_with_provider(const icu4x::DataProvider& provider, const icu4x::Locale& locale, std::optional length, std::optional time_precision, std::optional alignment, std::optional year_style) { + auto result = icu4x::capi::icu4x_DateTimeFormatter_create_ymdt_with_provider_mv1(provider.AsFFI(), locale.AsFFI(), - length.AsFFI()); + length.has_value() ? (icu4x::capi::DateTimeLength_option{ { length.value().AsFFI() }, true }) : (icu4x::capi::DateTimeLength_option{ {}, false }), + time_precision.has_value() ? (icu4x::capi::TimePrecision_option{ { time_precision.value().AsFFI() }, true }) : (icu4x::capi::TimePrecision_option{ {}, false }), + alignment.has_value() ? (icu4x::capi::DateTimeAlignment_option{ { alignment.value().AsFFI() }, true }) : (icu4x::capi::DateTimeAlignment_option{ {}, false }), + year_style.has_value() ? (icu4x::capi::YearStyle_option{ { year_style.value().AsFFI() }, true }) : (icu4x::capi::YearStyle_option{ {}, false })); + return result.is_ok ? diplomat::result, icu4x::DateTimeFormatterLoadError>(diplomat::Ok>(std::unique_ptr(icu4x::DateTimeFormatter::FromFFI(result.ok)))) : diplomat::result, icu4x::DateTimeFormatterLoadError>(diplomat::Err(icu4x::DateTimeFormatterLoadError::FromFFI(result.err))); +} + +inline diplomat::result, icu4x::DateTimeFormatterLoadError> icu4x::DateTimeFormatter::create_det(const icu4x::Locale& locale, std::optional length, std::optional time_precision, std::optional alignment) { + auto result = icu4x::capi::icu4x_DateTimeFormatter_create_det_mv1(locale.AsFFI(), + length.has_value() ? (icu4x::capi::DateTimeLength_option{ { length.value().AsFFI() }, true }) : (icu4x::capi::DateTimeLength_option{ {}, false }), + time_precision.has_value() ? (icu4x::capi::TimePrecision_option{ { time_precision.value().AsFFI() }, true }) : (icu4x::capi::TimePrecision_option{ {}, false }), + alignment.has_value() ? (icu4x::capi::DateTimeAlignment_option{ { alignment.value().AsFFI() }, true }) : (icu4x::capi::DateTimeAlignment_option{ {}, false })); return result.is_ok ? diplomat::result, icu4x::DateTimeFormatterLoadError>(diplomat::Ok>(std::unique_ptr(icu4x::DateTimeFormatter::FromFFI(result.ok)))) : diplomat::result, icu4x::DateTimeFormatterLoadError>(diplomat::Err(icu4x::DateTimeFormatterLoadError::FromFFI(result.err))); } -inline diplomat::result icu4x::DateTimeFormatter::format(const icu4x::Date& date, const icu4x::Time& time) const { +inline diplomat::result, icu4x::DateTimeFormatterLoadError> icu4x::DateTimeFormatter::create_det_with_provider(const icu4x::DataProvider& provider, const icu4x::Locale& locale, std::optional length, std::optional time_precision, std::optional alignment) { + auto result = icu4x::capi::icu4x_DateTimeFormatter_create_det_with_provider_mv1(provider.AsFFI(), + locale.AsFFI(), + length.has_value() ? (icu4x::capi::DateTimeLength_option{ { length.value().AsFFI() }, true }) : (icu4x::capi::DateTimeLength_option{ {}, false }), + time_precision.has_value() ? (icu4x::capi::TimePrecision_option{ { time_precision.value().AsFFI() }, true }) : (icu4x::capi::TimePrecision_option{ {}, false }), + alignment.has_value() ? (icu4x::capi::DateTimeAlignment_option{ { alignment.value().AsFFI() }, true }) : (icu4x::capi::DateTimeAlignment_option{ {}, false })); + return result.is_ok ? diplomat::result, icu4x::DateTimeFormatterLoadError>(diplomat::Ok>(std::unique_ptr(icu4x::DateTimeFormatter::FromFFI(result.ok)))) : diplomat::result, icu4x::DateTimeFormatterLoadError>(diplomat::Err(icu4x::DateTimeFormatterLoadError::FromFFI(result.err))); +} + +inline diplomat::result, icu4x::DateTimeFormatterLoadError> icu4x::DateTimeFormatter::create_mdet(const icu4x::Locale& locale, std::optional length, std::optional time_precision, std::optional alignment) { + auto result = icu4x::capi::icu4x_DateTimeFormatter_create_mdet_mv1(locale.AsFFI(), + length.has_value() ? (icu4x::capi::DateTimeLength_option{ { length.value().AsFFI() }, true }) : (icu4x::capi::DateTimeLength_option{ {}, false }), + time_precision.has_value() ? (icu4x::capi::TimePrecision_option{ { time_precision.value().AsFFI() }, true }) : (icu4x::capi::TimePrecision_option{ {}, false }), + alignment.has_value() ? (icu4x::capi::DateTimeAlignment_option{ { alignment.value().AsFFI() }, true }) : (icu4x::capi::DateTimeAlignment_option{ {}, false })); + return result.is_ok ? diplomat::result, icu4x::DateTimeFormatterLoadError>(diplomat::Ok>(std::unique_ptr(icu4x::DateTimeFormatter::FromFFI(result.ok)))) : diplomat::result, icu4x::DateTimeFormatterLoadError>(diplomat::Err(icu4x::DateTimeFormatterLoadError::FromFFI(result.err))); +} + +inline diplomat::result, icu4x::DateTimeFormatterLoadError> icu4x::DateTimeFormatter::create_mdet_with_provider(const icu4x::DataProvider& provider, const icu4x::Locale& locale, std::optional length, std::optional time_precision, std::optional alignment) { + auto result = icu4x::capi::icu4x_DateTimeFormatter_create_mdet_with_provider_mv1(provider.AsFFI(), + locale.AsFFI(), + length.has_value() ? (icu4x::capi::DateTimeLength_option{ { length.value().AsFFI() }, true }) : (icu4x::capi::DateTimeLength_option{ {}, false }), + time_precision.has_value() ? (icu4x::capi::TimePrecision_option{ { time_precision.value().AsFFI() }, true }) : (icu4x::capi::TimePrecision_option{ {}, false }), + alignment.has_value() ? (icu4x::capi::DateTimeAlignment_option{ { alignment.value().AsFFI() }, true }) : (icu4x::capi::DateTimeAlignment_option{ {}, false })); + return result.is_ok ? diplomat::result, icu4x::DateTimeFormatterLoadError>(diplomat::Ok>(std::unique_ptr(icu4x::DateTimeFormatter::FromFFI(result.ok)))) : diplomat::result, icu4x::DateTimeFormatterLoadError>(diplomat::Err(icu4x::DateTimeFormatterLoadError::FromFFI(result.err))); +} + +inline diplomat::result, icu4x::DateTimeFormatterLoadError> icu4x::DateTimeFormatter::create_ymdet(const icu4x::Locale& locale, std::optional length, std::optional time_precision, std::optional alignment, std::optional year_style) { + auto result = icu4x::capi::icu4x_DateTimeFormatter_create_ymdet_mv1(locale.AsFFI(), + length.has_value() ? (icu4x::capi::DateTimeLength_option{ { length.value().AsFFI() }, true }) : (icu4x::capi::DateTimeLength_option{ {}, false }), + time_precision.has_value() ? (icu4x::capi::TimePrecision_option{ { time_precision.value().AsFFI() }, true }) : (icu4x::capi::TimePrecision_option{ {}, false }), + alignment.has_value() ? (icu4x::capi::DateTimeAlignment_option{ { alignment.value().AsFFI() }, true }) : (icu4x::capi::DateTimeAlignment_option{ {}, false }), + year_style.has_value() ? (icu4x::capi::YearStyle_option{ { year_style.value().AsFFI() }, true }) : (icu4x::capi::YearStyle_option{ {}, false })); + return result.is_ok ? diplomat::result, icu4x::DateTimeFormatterLoadError>(diplomat::Ok>(std::unique_ptr(icu4x::DateTimeFormatter::FromFFI(result.ok)))) : diplomat::result, icu4x::DateTimeFormatterLoadError>(diplomat::Err(icu4x::DateTimeFormatterLoadError::FromFFI(result.err))); +} + +inline diplomat::result, icu4x::DateTimeFormatterLoadError> icu4x::DateTimeFormatter::create_ymdet_with_provider(const icu4x::DataProvider& provider, const icu4x::Locale& locale, std::optional length, std::optional time_precision, std::optional alignment, std::optional year_style) { + auto result = icu4x::capi::icu4x_DateTimeFormatter_create_ymdet_with_provider_mv1(provider.AsFFI(), + locale.AsFFI(), + length.has_value() ? (icu4x::capi::DateTimeLength_option{ { length.value().AsFFI() }, true }) : (icu4x::capi::DateTimeLength_option{ {}, false }), + time_precision.has_value() ? (icu4x::capi::TimePrecision_option{ { time_precision.value().AsFFI() }, true }) : (icu4x::capi::TimePrecision_option{ {}, false }), + alignment.has_value() ? (icu4x::capi::DateTimeAlignment_option{ { alignment.value().AsFFI() }, true }) : (icu4x::capi::DateTimeAlignment_option{ {}, false }), + year_style.has_value() ? (icu4x::capi::YearStyle_option{ { year_style.value().AsFFI() }, true }) : (icu4x::capi::YearStyle_option{ {}, false })); + return result.is_ok ? diplomat::result, icu4x::DateTimeFormatterLoadError>(diplomat::Ok>(std::unique_ptr(icu4x::DateTimeFormatter::FromFFI(result.ok)))) : diplomat::result, icu4x::DateTimeFormatterLoadError>(diplomat::Err(icu4x::DateTimeFormatterLoadError::FromFFI(result.err))); +} + +inline diplomat::result, icu4x::DateTimeFormatterLoadError> icu4x::DateTimeFormatter::create_et(const icu4x::Locale& locale, std::optional length, std::optional time_precision, std::optional alignment) { + auto result = icu4x::capi::icu4x_DateTimeFormatter_create_et_mv1(locale.AsFFI(), + length.has_value() ? (icu4x::capi::DateTimeLength_option{ { length.value().AsFFI() }, true }) : (icu4x::capi::DateTimeLength_option{ {}, false }), + time_precision.has_value() ? (icu4x::capi::TimePrecision_option{ { time_precision.value().AsFFI() }, true }) : (icu4x::capi::TimePrecision_option{ {}, false }), + alignment.has_value() ? (icu4x::capi::DateTimeAlignment_option{ { alignment.value().AsFFI() }, true }) : (icu4x::capi::DateTimeAlignment_option{ {}, false })); + return result.is_ok ? diplomat::result, icu4x::DateTimeFormatterLoadError>(diplomat::Ok>(std::unique_ptr(icu4x::DateTimeFormatter::FromFFI(result.ok)))) : diplomat::result, icu4x::DateTimeFormatterLoadError>(diplomat::Err(icu4x::DateTimeFormatterLoadError::FromFFI(result.err))); +} + +inline diplomat::result, icu4x::DateTimeFormatterLoadError> icu4x::DateTimeFormatter::create_et_with_provider(const icu4x::DataProvider& provider, const icu4x::Locale& locale, std::optional length, std::optional time_precision, std::optional alignment) { + auto result = icu4x::capi::icu4x_DateTimeFormatter_create_et_with_provider_mv1(provider.AsFFI(), + locale.AsFFI(), + length.has_value() ? (icu4x::capi::DateTimeLength_option{ { length.value().AsFFI() }, true }) : (icu4x::capi::DateTimeLength_option{ {}, false }), + time_precision.has_value() ? (icu4x::capi::TimePrecision_option{ { time_precision.value().AsFFI() }, true }) : (icu4x::capi::TimePrecision_option{ {}, false }), + alignment.has_value() ? (icu4x::capi::DateTimeAlignment_option{ { alignment.value().AsFFI() }, true }) : (icu4x::capi::DateTimeAlignment_option{ {}, false })); + return result.is_ok ? diplomat::result, icu4x::DateTimeFormatterLoadError>(diplomat::Ok>(std::unique_ptr(icu4x::DateTimeFormatter::FromFFI(result.ok)))) : diplomat::result, icu4x::DateTimeFormatterLoadError>(diplomat::Err(icu4x::DateTimeFormatterLoadError::FromFFI(result.err))); +} + +inline std::string icu4x::DateTimeFormatter::format_iso(const icu4x::IsoDate& date, const icu4x::Time& time) const { std::string output; diplomat::capi::DiplomatWrite write = diplomat::WriteFromString(output); - auto result = icu4x::capi::icu4x_DateTimeFormatter_format_mv1(this->AsFFI(), + icu4x::capi::icu4x_DateTimeFormatter_format_iso_mv1(this->AsFFI(), date.AsFFI(), time.AsFFI(), &write); - return result.is_ok ? diplomat::result(diplomat::Ok(std::move(output))) : diplomat::result(diplomat::Err(icu4x::DateTimeFormatError::FromFFI(result.err))); + return output; } -inline diplomat::result icu4x::DateTimeFormatter::format_iso(const icu4x::IsoDate& date, const icu4x::Time& time) const { +inline diplomat::result icu4x::DateTimeFormatter::format_same_calendar(const icu4x::Date& date, const icu4x::Time& time) const { std::string output; diplomat::capi::DiplomatWrite write = diplomat::WriteFromString(output); - auto result = icu4x::capi::icu4x_DateTimeFormatter_format_iso_mv1(this->AsFFI(), + auto result = icu4x::capi::icu4x_DateTimeFormatter_format_same_calendar_mv1(this->AsFFI(), date.AsFFI(), time.AsFFI(), &write); - return result.is_ok ? diplomat::result(diplomat::Ok(std::move(output))) : diplomat::result(diplomat::Err(icu4x::DateTimeFormatError::FromFFI(result.err))); -} - -inline std::unique_ptr icu4x::DateTimeFormatter::calendar() const { - auto result = icu4x::capi::icu4x_DateTimeFormatter_calendar_mv1(this->AsFFI()); - return std::unique_ptr(icu4x::Calendar::FromFFI(result)); + return result.is_ok ? diplomat::result(diplomat::Ok(std::move(output))) : diplomat::result(diplomat::Err(icu4x::DateTimeMismatchedCalendarError::FromFFI(result.err))); } inline const icu4x::capi::DateTimeFormatter* icu4x::DateTimeFormatter::AsFFI() const { diff --git a/ffi/capi/bindings/cpp/icu4x/DateTimeFormatterGregorian.d.hpp b/ffi/capi/bindings/cpp/icu4x/DateTimeFormatterGregorian.d.hpp new file mode 100644 index 00000000000..f1c1d65950c --- /dev/null +++ b/ffi/capi/bindings/cpp/icu4x/DateTimeFormatterGregorian.d.hpp @@ -0,0 +1,87 @@ +#ifndef icu4x_DateTimeFormatterGregorian_D_HPP +#define icu4x_DateTimeFormatterGregorian_D_HPP + +#include +#include +#include +#include +#include +#include +#include +#include "../diplomat_runtime.hpp" + +namespace icu4x { +namespace capi { struct DataProvider; } +class DataProvider; +namespace capi { struct DateTimeFormatterGregorian; } +class DateTimeFormatterGregorian; +namespace capi { struct IsoDate; } +class IsoDate; +namespace capi { struct Locale; } +class Locale; +namespace capi { struct Time; } +class Time; +class DateTimeAlignment; +class DateTimeFormatterLoadError; +class DateTimeLength; +class TimePrecision; +class YearStyle; +} + + +namespace icu4x { +namespace capi { + struct DateTimeFormatterGregorian; +} // namespace capi +} // namespace + +namespace icu4x { +class DateTimeFormatterGregorian { +public: + + inline static diplomat::result, icu4x::DateTimeFormatterLoadError> create_dt(const icu4x::Locale& locale, std::optional length, std::optional time_precision, std::optional alignment); + + inline static diplomat::result, icu4x::DateTimeFormatterLoadError> create_dt_with_provider(const icu4x::DataProvider& provider, const icu4x::Locale& locale, std::optional length, std::optional time_precision, std::optional alignment); + + inline static diplomat::result, icu4x::DateTimeFormatterLoadError> create_mdt(const icu4x::Locale& locale, std::optional length, std::optional time_precision, std::optional alignment); + + inline static diplomat::result, icu4x::DateTimeFormatterLoadError> create_mdt_with_provider(const icu4x::DataProvider& provider, const icu4x::Locale& locale, std::optional length, std::optional time_precision, std::optional alignment); + + inline static diplomat::result, icu4x::DateTimeFormatterLoadError> create_ymdt(const icu4x::Locale& locale, std::optional length, std::optional time_precision, std::optional alignment, std::optional year_style); + + inline static diplomat::result, icu4x::DateTimeFormatterLoadError> create_ymdt_with_provider(const icu4x::DataProvider& provider, const icu4x::Locale& locale, std::optional length, std::optional time_precision, std::optional alignment, std::optional year_style); + + inline static diplomat::result, icu4x::DateTimeFormatterLoadError> create_det(const icu4x::Locale& locale, std::optional length, std::optional time_precision, std::optional alignment); + + inline static diplomat::result, icu4x::DateTimeFormatterLoadError> create_det_with_provider(const icu4x::DataProvider& provider, const icu4x::Locale& locale, std::optional length, std::optional time_precision, std::optional alignment); + + inline static diplomat::result, icu4x::DateTimeFormatterLoadError> create_mdet(const icu4x::Locale& locale, std::optional length, std::optional time_precision, std::optional alignment); + + inline static diplomat::result, icu4x::DateTimeFormatterLoadError> create_mdet_with_provider(const icu4x::DataProvider& provider, const icu4x::Locale& locale, std::optional length, std::optional time_precision, std::optional alignment); + + inline static diplomat::result, icu4x::DateTimeFormatterLoadError> create_ymdet(const icu4x::Locale& locale, std::optional length, std::optional time_precision, std::optional alignment, std::optional year_style); + + inline static diplomat::result, icu4x::DateTimeFormatterLoadError> create_ymdet_with_provider(const icu4x::DataProvider& provider, const icu4x::Locale& locale, std::optional length, std::optional time_precision, std::optional alignment, std::optional year_style); + + inline static diplomat::result, icu4x::DateTimeFormatterLoadError> create_et(const icu4x::Locale& locale, std::optional length, std::optional time_precision, std::optional alignment); + + inline static diplomat::result, icu4x::DateTimeFormatterLoadError> create_et_with_provider(const icu4x::DataProvider& provider, const icu4x::Locale& locale, std::optional length, std::optional time_precision, std::optional alignment); + + inline std::string format_iso(const icu4x::IsoDate& date, const icu4x::Time& time) const; + + inline const icu4x::capi::DateTimeFormatterGregorian* AsFFI() const; + inline icu4x::capi::DateTimeFormatterGregorian* AsFFI(); + inline static const icu4x::DateTimeFormatterGregorian* FromFFI(const icu4x::capi::DateTimeFormatterGregorian* ptr); + inline static icu4x::DateTimeFormatterGregorian* FromFFI(icu4x::capi::DateTimeFormatterGregorian* ptr); + inline static void operator delete(void* ptr); +private: + DateTimeFormatterGregorian() = delete; + DateTimeFormatterGregorian(const icu4x::DateTimeFormatterGregorian&) = delete; + DateTimeFormatterGregorian(icu4x::DateTimeFormatterGregorian&&) noexcept = delete; + DateTimeFormatterGregorian operator=(const icu4x::DateTimeFormatterGregorian&) = delete; + DateTimeFormatterGregorian operator=(icu4x::DateTimeFormatterGregorian&&) noexcept = delete; + static void operator delete[](void*, size_t) = delete; +}; + +} // namespace +#endif // icu4x_DateTimeFormatterGregorian_D_HPP diff --git a/ffi/capi/bindings/cpp/icu4x/DateTimeFormatterGregorian.hpp b/ffi/capi/bindings/cpp/icu4x/DateTimeFormatterGregorian.hpp new file mode 100644 index 00000000000..c34c30a0769 --- /dev/null +++ b/ffi/capi/bindings/cpp/icu4x/DateTimeFormatterGregorian.hpp @@ -0,0 +1,234 @@ +#ifndef icu4x_DateTimeFormatterGregorian_HPP +#define icu4x_DateTimeFormatterGregorian_HPP + +#include "DateTimeFormatterGregorian.d.hpp" + +#include +#include +#include +#include +#include +#include +#include +#include "../diplomat_runtime.hpp" +#include "DataProvider.hpp" +#include "DateTimeAlignment.hpp" +#include "DateTimeFormatterLoadError.hpp" +#include "DateTimeLength.hpp" +#include "IsoDate.hpp" +#include "Locale.hpp" +#include "Time.hpp" +#include "TimePrecision.hpp" +#include "YearStyle.hpp" + + +namespace icu4x { +namespace capi { + extern "C" { + + typedef struct icu4x_DateTimeFormatterGregorian_create_dt_mv1_result {union {icu4x::capi::DateTimeFormatterGregorian* ok; icu4x::capi::DateTimeFormatterLoadError err;}; bool is_ok;} icu4x_DateTimeFormatterGregorian_create_dt_mv1_result; + icu4x_DateTimeFormatterGregorian_create_dt_mv1_result icu4x_DateTimeFormatterGregorian_create_dt_mv1(const icu4x::capi::Locale* locale, icu4x::capi::DateTimeLength_option length, icu4x::capi::TimePrecision_option time_precision, icu4x::capi::DateTimeAlignment_option alignment); + + typedef struct icu4x_DateTimeFormatterGregorian_create_dt_with_provider_mv1_result {union {icu4x::capi::DateTimeFormatterGregorian* ok; icu4x::capi::DateTimeFormatterLoadError err;}; bool is_ok;} icu4x_DateTimeFormatterGregorian_create_dt_with_provider_mv1_result; + icu4x_DateTimeFormatterGregorian_create_dt_with_provider_mv1_result icu4x_DateTimeFormatterGregorian_create_dt_with_provider_mv1(const icu4x::capi::DataProvider* provider, const icu4x::capi::Locale* locale, icu4x::capi::DateTimeLength_option length, icu4x::capi::TimePrecision_option time_precision, icu4x::capi::DateTimeAlignment_option alignment); + + typedef struct icu4x_DateTimeFormatterGregorian_create_mdt_mv1_result {union {icu4x::capi::DateTimeFormatterGregorian* ok; icu4x::capi::DateTimeFormatterLoadError err;}; bool is_ok;} icu4x_DateTimeFormatterGregorian_create_mdt_mv1_result; + icu4x_DateTimeFormatterGregorian_create_mdt_mv1_result icu4x_DateTimeFormatterGregorian_create_mdt_mv1(const icu4x::capi::Locale* locale, icu4x::capi::DateTimeLength_option length, icu4x::capi::TimePrecision_option time_precision, icu4x::capi::DateTimeAlignment_option alignment); + + typedef struct icu4x_DateTimeFormatterGregorian_create_mdt_with_provider_mv1_result {union {icu4x::capi::DateTimeFormatterGregorian* ok; icu4x::capi::DateTimeFormatterLoadError err;}; bool is_ok;} icu4x_DateTimeFormatterGregorian_create_mdt_with_provider_mv1_result; + icu4x_DateTimeFormatterGregorian_create_mdt_with_provider_mv1_result icu4x_DateTimeFormatterGregorian_create_mdt_with_provider_mv1(const icu4x::capi::DataProvider* provider, const icu4x::capi::Locale* locale, icu4x::capi::DateTimeLength_option length, icu4x::capi::TimePrecision_option time_precision, icu4x::capi::DateTimeAlignment_option alignment); + + typedef struct icu4x_DateTimeFormatterGregorian_create_ymdt_mv1_result {union {icu4x::capi::DateTimeFormatterGregorian* ok; icu4x::capi::DateTimeFormatterLoadError err;}; bool is_ok;} icu4x_DateTimeFormatterGregorian_create_ymdt_mv1_result; + icu4x_DateTimeFormatterGregorian_create_ymdt_mv1_result icu4x_DateTimeFormatterGregorian_create_ymdt_mv1(const icu4x::capi::Locale* locale, icu4x::capi::DateTimeLength_option length, icu4x::capi::TimePrecision_option time_precision, icu4x::capi::DateTimeAlignment_option alignment, icu4x::capi::YearStyle_option year_style); + + typedef struct icu4x_DateTimeFormatterGregorian_create_ymdt_with_provider_mv1_result {union {icu4x::capi::DateTimeFormatterGregorian* ok; icu4x::capi::DateTimeFormatterLoadError err;}; bool is_ok;} icu4x_DateTimeFormatterGregorian_create_ymdt_with_provider_mv1_result; + icu4x_DateTimeFormatterGregorian_create_ymdt_with_provider_mv1_result icu4x_DateTimeFormatterGregorian_create_ymdt_with_provider_mv1(const icu4x::capi::DataProvider* provider, const icu4x::capi::Locale* locale, icu4x::capi::DateTimeLength_option length, icu4x::capi::TimePrecision_option time_precision, icu4x::capi::DateTimeAlignment_option alignment, icu4x::capi::YearStyle_option year_style); + + typedef struct icu4x_DateTimeFormatterGregorian_create_det_mv1_result {union {icu4x::capi::DateTimeFormatterGregorian* ok; icu4x::capi::DateTimeFormatterLoadError err;}; bool is_ok;} icu4x_DateTimeFormatterGregorian_create_det_mv1_result; + icu4x_DateTimeFormatterGregorian_create_det_mv1_result icu4x_DateTimeFormatterGregorian_create_det_mv1(const icu4x::capi::Locale* locale, icu4x::capi::DateTimeLength_option length, icu4x::capi::TimePrecision_option time_precision, icu4x::capi::DateTimeAlignment_option alignment); + + typedef struct icu4x_DateTimeFormatterGregorian_create_det_with_provider_mv1_result {union {icu4x::capi::DateTimeFormatterGregorian* ok; icu4x::capi::DateTimeFormatterLoadError err;}; bool is_ok;} icu4x_DateTimeFormatterGregorian_create_det_with_provider_mv1_result; + icu4x_DateTimeFormatterGregorian_create_det_with_provider_mv1_result icu4x_DateTimeFormatterGregorian_create_det_with_provider_mv1(const icu4x::capi::DataProvider* provider, const icu4x::capi::Locale* locale, icu4x::capi::DateTimeLength_option length, icu4x::capi::TimePrecision_option time_precision, icu4x::capi::DateTimeAlignment_option alignment); + + typedef struct icu4x_DateTimeFormatterGregorian_create_mdet_mv1_result {union {icu4x::capi::DateTimeFormatterGregorian* ok; icu4x::capi::DateTimeFormatterLoadError err;}; bool is_ok;} icu4x_DateTimeFormatterGregorian_create_mdet_mv1_result; + icu4x_DateTimeFormatterGregorian_create_mdet_mv1_result icu4x_DateTimeFormatterGregorian_create_mdet_mv1(const icu4x::capi::Locale* locale, icu4x::capi::DateTimeLength_option length, icu4x::capi::TimePrecision_option time_precision, icu4x::capi::DateTimeAlignment_option alignment); + + typedef struct icu4x_DateTimeFormatterGregorian_create_mdet_with_provider_mv1_result {union {icu4x::capi::DateTimeFormatterGregorian* ok; icu4x::capi::DateTimeFormatterLoadError err;}; bool is_ok;} icu4x_DateTimeFormatterGregorian_create_mdet_with_provider_mv1_result; + icu4x_DateTimeFormatterGregorian_create_mdet_with_provider_mv1_result icu4x_DateTimeFormatterGregorian_create_mdet_with_provider_mv1(const icu4x::capi::DataProvider* provider, const icu4x::capi::Locale* locale, icu4x::capi::DateTimeLength_option length, icu4x::capi::TimePrecision_option time_precision, icu4x::capi::DateTimeAlignment_option alignment); + + typedef struct icu4x_DateTimeFormatterGregorian_create_ymdet_mv1_result {union {icu4x::capi::DateTimeFormatterGregorian* ok; icu4x::capi::DateTimeFormatterLoadError err;}; bool is_ok;} icu4x_DateTimeFormatterGregorian_create_ymdet_mv1_result; + icu4x_DateTimeFormatterGregorian_create_ymdet_mv1_result icu4x_DateTimeFormatterGregorian_create_ymdet_mv1(const icu4x::capi::Locale* locale, icu4x::capi::DateTimeLength_option length, icu4x::capi::TimePrecision_option time_precision, icu4x::capi::DateTimeAlignment_option alignment, icu4x::capi::YearStyle_option year_style); + + typedef struct icu4x_DateTimeFormatterGregorian_create_ymdet_with_provider_mv1_result {union {icu4x::capi::DateTimeFormatterGregorian* ok; icu4x::capi::DateTimeFormatterLoadError err;}; bool is_ok;} icu4x_DateTimeFormatterGregorian_create_ymdet_with_provider_mv1_result; + icu4x_DateTimeFormatterGregorian_create_ymdet_with_provider_mv1_result icu4x_DateTimeFormatterGregorian_create_ymdet_with_provider_mv1(const icu4x::capi::DataProvider* provider, const icu4x::capi::Locale* locale, icu4x::capi::DateTimeLength_option length, icu4x::capi::TimePrecision_option time_precision, icu4x::capi::DateTimeAlignment_option alignment, icu4x::capi::YearStyle_option year_style); + + typedef struct icu4x_DateTimeFormatterGregorian_create_et_mv1_result {union {icu4x::capi::DateTimeFormatterGregorian* ok; icu4x::capi::DateTimeFormatterLoadError err;}; bool is_ok;} icu4x_DateTimeFormatterGregorian_create_et_mv1_result; + icu4x_DateTimeFormatterGregorian_create_et_mv1_result icu4x_DateTimeFormatterGregorian_create_et_mv1(const icu4x::capi::Locale* locale, icu4x::capi::DateTimeLength_option length, icu4x::capi::TimePrecision_option time_precision, icu4x::capi::DateTimeAlignment_option alignment); + + typedef struct icu4x_DateTimeFormatterGregorian_create_et_with_provider_mv1_result {union {icu4x::capi::DateTimeFormatterGregorian* ok; icu4x::capi::DateTimeFormatterLoadError err;}; bool is_ok;} icu4x_DateTimeFormatterGregorian_create_et_with_provider_mv1_result; + icu4x_DateTimeFormatterGregorian_create_et_with_provider_mv1_result icu4x_DateTimeFormatterGregorian_create_et_with_provider_mv1(const icu4x::capi::DataProvider* provider, const icu4x::capi::Locale* locale, icu4x::capi::DateTimeLength_option length, icu4x::capi::TimePrecision_option time_precision, icu4x::capi::DateTimeAlignment_option alignment); + + void icu4x_DateTimeFormatterGregorian_format_iso_mv1(const icu4x::capi::DateTimeFormatterGregorian* self, const icu4x::capi::IsoDate* date, const icu4x::capi::Time* time, diplomat::capi::DiplomatWrite* write); + + + void icu4x_DateTimeFormatterGregorian_destroy_mv1(DateTimeFormatterGregorian* self); + + } // extern "C" +} // namespace capi +} // namespace + +inline diplomat::result, icu4x::DateTimeFormatterLoadError> icu4x::DateTimeFormatterGregorian::create_dt(const icu4x::Locale& locale, std::optional length, std::optional time_precision, std::optional alignment) { + auto result = icu4x::capi::icu4x_DateTimeFormatterGregorian_create_dt_mv1(locale.AsFFI(), + length.has_value() ? (icu4x::capi::DateTimeLength_option{ { length.value().AsFFI() }, true }) : (icu4x::capi::DateTimeLength_option{ {}, false }), + time_precision.has_value() ? (icu4x::capi::TimePrecision_option{ { time_precision.value().AsFFI() }, true }) : (icu4x::capi::TimePrecision_option{ {}, false }), + alignment.has_value() ? (icu4x::capi::DateTimeAlignment_option{ { alignment.value().AsFFI() }, true }) : (icu4x::capi::DateTimeAlignment_option{ {}, false })); + return result.is_ok ? diplomat::result, icu4x::DateTimeFormatterLoadError>(diplomat::Ok>(std::unique_ptr(icu4x::DateTimeFormatterGregorian::FromFFI(result.ok)))) : diplomat::result, icu4x::DateTimeFormatterLoadError>(diplomat::Err(icu4x::DateTimeFormatterLoadError::FromFFI(result.err))); +} + +inline diplomat::result, icu4x::DateTimeFormatterLoadError> icu4x::DateTimeFormatterGregorian::create_dt_with_provider(const icu4x::DataProvider& provider, const icu4x::Locale& locale, std::optional length, std::optional time_precision, std::optional alignment) { + auto result = icu4x::capi::icu4x_DateTimeFormatterGregorian_create_dt_with_provider_mv1(provider.AsFFI(), + locale.AsFFI(), + length.has_value() ? (icu4x::capi::DateTimeLength_option{ { length.value().AsFFI() }, true }) : (icu4x::capi::DateTimeLength_option{ {}, false }), + time_precision.has_value() ? (icu4x::capi::TimePrecision_option{ { time_precision.value().AsFFI() }, true }) : (icu4x::capi::TimePrecision_option{ {}, false }), + alignment.has_value() ? (icu4x::capi::DateTimeAlignment_option{ { alignment.value().AsFFI() }, true }) : (icu4x::capi::DateTimeAlignment_option{ {}, false })); + return result.is_ok ? diplomat::result, icu4x::DateTimeFormatterLoadError>(diplomat::Ok>(std::unique_ptr(icu4x::DateTimeFormatterGregorian::FromFFI(result.ok)))) : diplomat::result, icu4x::DateTimeFormatterLoadError>(diplomat::Err(icu4x::DateTimeFormatterLoadError::FromFFI(result.err))); +} + +inline diplomat::result, icu4x::DateTimeFormatterLoadError> icu4x::DateTimeFormatterGregorian::create_mdt(const icu4x::Locale& locale, std::optional length, std::optional time_precision, std::optional alignment) { + auto result = icu4x::capi::icu4x_DateTimeFormatterGregorian_create_mdt_mv1(locale.AsFFI(), + length.has_value() ? (icu4x::capi::DateTimeLength_option{ { length.value().AsFFI() }, true }) : (icu4x::capi::DateTimeLength_option{ {}, false }), + time_precision.has_value() ? (icu4x::capi::TimePrecision_option{ { time_precision.value().AsFFI() }, true }) : (icu4x::capi::TimePrecision_option{ {}, false }), + alignment.has_value() ? (icu4x::capi::DateTimeAlignment_option{ { alignment.value().AsFFI() }, true }) : (icu4x::capi::DateTimeAlignment_option{ {}, false })); + return result.is_ok ? diplomat::result, icu4x::DateTimeFormatterLoadError>(diplomat::Ok>(std::unique_ptr(icu4x::DateTimeFormatterGregorian::FromFFI(result.ok)))) : diplomat::result, icu4x::DateTimeFormatterLoadError>(diplomat::Err(icu4x::DateTimeFormatterLoadError::FromFFI(result.err))); +} + +inline diplomat::result, icu4x::DateTimeFormatterLoadError> icu4x::DateTimeFormatterGregorian::create_mdt_with_provider(const icu4x::DataProvider& provider, const icu4x::Locale& locale, std::optional length, std::optional time_precision, std::optional alignment) { + auto result = icu4x::capi::icu4x_DateTimeFormatterGregorian_create_mdt_with_provider_mv1(provider.AsFFI(), + locale.AsFFI(), + length.has_value() ? (icu4x::capi::DateTimeLength_option{ { length.value().AsFFI() }, true }) : (icu4x::capi::DateTimeLength_option{ {}, false }), + time_precision.has_value() ? (icu4x::capi::TimePrecision_option{ { time_precision.value().AsFFI() }, true }) : (icu4x::capi::TimePrecision_option{ {}, false }), + alignment.has_value() ? (icu4x::capi::DateTimeAlignment_option{ { alignment.value().AsFFI() }, true }) : (icu4x::capi::DateTimeAlignment_option{ {}, false })); + return result.is_ok ? diplomat::result, icu4x::DateTimeFormatterLoadError>(diplomat::Ok>(std::unique_ptr(icu4x::DateTimeFormatterGregorian::FromFFI(result.ok)))) : diplomat::result, icu4x::DateTimeFormatterLoadError>(diplomat::Err(icu4x::DateTimeFormatterLoadError::FromFFI(result.err))); +} + +inline diplomat::result, icu4x::DateTimeFormatterLoadError> icu4x::DateTimeFormatterGregorian::create_ymdt(const icu4x::Locale& locale, std::optional length, std::optional time_precision, std::optional alignment, std::optional year_style) { + auto result = icu4x::capi::icu4x_DateTimeFormatterGregorian_create_ymdt_mv1(locale.AsFFI(), + length.has_value() ? (icu4x::capi::DateTimeLength_option{ { length.value().AsFFI() }, true }) : (icu4x::capi::DateTimeLength_option{ {}, false }), + time_precision.has_value() ? (icu4x::capi::TimePrecision_option{ { time_precision.value().AsFFI() }, true }) : (icu4x::capi::TimePrecision_option{ {}, false }), + alignment.has_value() ? (icu4x::capi::DateTimeAlignment_option{ { alignment.value().AsFFI() }, true }) : (icu4x::capi::DateTimeAlignment_option{ {}, false }), + year_style.has_value() ? (icu4x::capi::YearStyle_option{ { year_style.value().AsFFI() }, true }) : (icu4x::capi::YearStyle_option{ {}, false })); + return result.is_ok ? diplomat::result, icu4x::DateTimeFormatterLoadError>(diplomat::Ok>(std::unique_ptr(icu4x::DateTimeFormatterGregorian::FromFFI(result.ok)))) : diplomat::result, icu4x::DateTimeFormatterLoadError>(diplomat::Err(icu4x::DateTimeFormatterLoadError::FromFFI(result.err))); +} + +inline diplomat::result, icu4x::DateTimeFormatterLoadError> icu4x::DateTimeFormatterGregorian::create_ymdt_with_provider(const icu4x::DataProvider& provider, const icu4x::Locale& locale, std::optional length, std::optional time_precision, std::optional alignment, std::optional year_style) { + auto result = icu4x::capi::icu4x_DateTimeFormatterGregorian_create_ymdt_with_provider_mv1(provider.AsFFI(), + locale.AsFFI(), + length.has_value() ? (icu4x::capi::DateTimeLength_option{ { length.value().AsFFI() }, true }) : (icu4x::capi::DateTimeLength_option{ {}, false }), + time_precision.has_value() ? (icu4x::capi::TimePrecision_option{ { time_precision.value().AsFFI() }, true }) : (icu4x::capi::TimePrecision_option{ {}, false }), + alignment.has_value() ? (icu4x::capi::DateTimeAlignment_option{ { alignment.value().AsFFI() }, true }) : (icu4x::capi::DateTimeAlignment_option{ {}, false }), + year_style.has_value() ? (icu4x::capi::YearStyle_option{ { year_style.value().AsFFI() }, true }) : (icu4x::capi::YearStyle_option{ {}, false })); + return result.is_ok ? diplomat::result, icu4x::DateTimeFormatterLoadError>(diplomat::Ok>(std::unique_ptr(icu4x::DateTimeFormatterGregorian::FromFFI(result.ok)))) : diplomat::result, icu4x::DateTimeFormatterLoadError>(diplomat::Err(icu4x::DateTimeFormatterLoadError::FromFFI(result.err))); +} + +inline diplomat::result, icu4x::DateTimeFormatterLoadError> icu4x::DateTimeFormatterGregorian::create_det(const icu4x::Locale& locale, std::optional length, std::optional time_precision, std::optional alignment) { + auto result = icu4x::capi::icu4x_DateTimeFormatterGregorian_create_det_mv1(locale.AsFFI(), + length.has_value() ? (icu4x::capi::DateTimeLength_option{ { length.value().AsFFI() }, true }) : (icu4x::capi::DateTimeLength_option{ {}, false }), + time_precision.has_value() ? (icu4x::capi::TimePrecision_option{ { time_precision.value().AsFFI() }, true }) : (icu4x::capi::TimePrecision_option{ {}, false }), + alignment.has_value() ? (icu4x::capi::DateTimeAlignment_option{ { alignment.value().AsFFI() }, true }) : (icu4x::capi::DateTimeAlignment_option{ {}, false })); + return result.is_ok ? diplomat::result, icu4x::DateTimeFormatterLoadError>(diplomat::Ok>(std::unique_ptr(icu4x::DateTimeFormatterGregorian::FromFFI(result.ok)))) : diplomat::result, icu4x::DateTimeFormatterLoadError>(diplomat::Err(icu4x::DateTimeFormatterLoadError::FromFFI(result.err))); +} + +inline diplomat::result, icu4x::DateTimeFormatterLoadError> icu4x::DateTimeFormatterGregorian::create_det_with_provider(const icu4x::DataProvider& provider, const icu4x::Locale& locale, std::optional length, std::optional time_precision, std::optional alignment) { + auto result = icu4x::capi::icu4x_DateTimeFormatterGregorian_create_det_with_provider_mv1(provider.AsFFI(), + locale.AsFFI(), + length.has_value() ? (icu4x::capi::DateTimeLength_option{ { length.value().AsFFI() }, true }) : (icu4x::capi::DateTimeLength_option{ {}, false }), + time_precision.has_value() ? (icu4x::capi::TimePrecision_option{ { time_precision.value().AsFFI() }, true }) : (icu4x::capi::TimePrecision_option{ {}, false }), + alignment.has_value() ? (icu4x::capi::DateTimeAlignment_option{ { alignment.value().AsFFI() }, true }) : (icu4x::capi::DateTimeAlignment_option{ {}, false })); + return result.is_ok ? diplomat::result, icu4x::DateTimeFormatterLoadError>(diplomat::Ok>(std::unique_ptr(icu4x::DateTimeFormatterGregorian::FromFFI(result.ok)))) : diplomat::result, icu4x::DateTimeFormatterLoadError>(diplomat::Err(icu4x::DateTimeFormatterLoadError::FromFFI(result.err))); +} + +inline diplomat::result, icu4x::DateTimeFormatterLoadError> icu4x::DateTimeFormatterGregorian::create_mdet(const icu4x::Locale& locale, std::optional length, std::optional time_precision, std::optional alignment) { + auto result = icu4x::capi::icu4x_DateTimeFormatterGregorian_create_mdet_mv1(locale.AsFFI(), + length.has_value() ? (icu4x::capi::DateTimeLength_option{ { length.value().AsFFI() }, true }) : (icu4x::capi::DateTimeLength_option{ {}, false }), + time_precision.has_value() ? (icu4x::capi::TimePrecision_option{ { time_precision.value().AsFFI() }, true }) : (icu4x::capi::TimePrecision_option{ {}, false }), + alignment.has_value() ? (icu4x::capi::DateTimeAlignment_option{ { alignment.value().AsFFI() }, true }) : (icu4x::capi::DateTimeAlignment_option{ {}, false })); + return result.is_ok ? diplomat::result, icu4x::DateTimeFormatterLoadError>(diplomat::Ok>(std::unique_ptr(icu4x::DateTimeFormatterGregorian::FromFFI(result.ok)))) : diplomat::result, icu4x::DateTimeFormatterLoadError>(diplomat::Err(icu4x::DateTimeFormatterLoadError::FromFFI(result.err))); +} + +inline diplomat::result, icu4x::DateTimeFormatterLoadError> icu4x::DateTimeFormatterGregorian::create_mdet_with_provider(const icu4x::DataProvider& provider, const icu4x::Locale& locale, std::optional length, std::optional time_precision, std::optional alignment) { + auto result = icu4x::capi::icu4x_DateTimeFormatterGregorian_create_mdet_with_provider_mv1(provider.AsFFI(), + locale.AsFFI(), + length.has_value() ? (icu4x::capi::DateTimeLength_option{ { length.value().AsFFI() }, true }) : (icu4x::capi::DateTimeLength_option{ {}, false }), + time_precision.has_value() ? (icu4x::capi::TimePrecision_option{ { time_precision.value().AsFFI() }, true }) : (icu4x::capi::TimePrecision_option{ {}, false }), + alignment.has_value() ? (icu4x::capi::DateTimeAlignment_option{ { alignment.value().AsFFI() }, true }) : (icu4x::capi::DateTimeAlignment_option{ {}, false })); + return result.is_ok ? diplomat::result, icu4x::DateTimeFormatterLoadError>(diplomat::Ok>(std::unique_ptr(icu4x::DateTimeFormatterGregorian::FromFFI(result.ok)))) : diplomat::result, icu4x::DateTimeFormatterLoadError>(diplomat::Err(icu4x::DateTimeFormatterLoadError::FromFFI(result.err))); +} + +inline diplomat::result, icu4x::DateTimeFormatterLoadError> icu4x::DateTimeFormatterGregorian::create_ymdet(const icu4x::Locale& locale, std::optional length, std::optional time_precision, std::optional alignment, std::optional year_style) { + auto result = icu4x::capi::icu4x_DateTimeFormatterGregorian_create_ymdet_mv1(locale.AsFFI(), + length.has_value() ? (icu4x::capi::DateTimeLength_option{ { length.value().AsFFI() }, true }) : (icu4x::capi::DateTimeLength_option{ {}, false }), + time_precision.has_value() ? (icu4x::capi::TimePrecision_option{ { time_precision.value().AsFFI() }, true }) : (icu4x::capi::TimePrecision_option{ {}, false }), + alignment.has_value() ? (icu4x::capi::DateTimeAlignment_option{ { alignment.value().AsFFI() }, true }) : (icu4x::capi::DateTimeAlignment_option{ {}, false }), + year_style.has_value() ? (icu4x::capi::YearStyle_option{ { year_style.value().AsFFI() }, true }) : (icu4x::capi::YearStyle_option{ {}, false })); + return result.is_ok ? diplomat::result, icu4x::DateTimeFormatterLoadError>(diplomat::Ok>(std::unique_ptr(icu4x::DateTimeFormatterGregorian::FromFFI(result.ok)))) : diplomat::result, icu4x::DateTimeFormatterLoadError>(diplomat::Err(icu4x::DateTimeFormatterLoadError::FromFFI(result.err))); +} + +inline diplomat::result, icu4x::DateTimeFormatterLoadError> icu4x::DateTimeFormatterGregorian::create_ymdet_with_provider(const icu4x::DataProvider& provider, const icu4x::Locale& locale, std::optional length, std::optional time_precision, std::optional alignment, std::optional year_style) { + auto result = icu4x::capi::icu4x_DateTimeFormatterGregorian_create_ymdet_with_provider_mv1(provider.AsFFI(), + locale.AsFFI(), + length.has_value() ? (icu4x::capi::DateTimeLength_option{ { length.value().AsFFI() }, true }) : (icu4x::capi::DateTimeLength_option{ {}, false }), + time_precision.has_value() ? (icu4x::capi::TimePrecision_option{ { time_precision.value().AsFFI() }, true }) : (icu4x::capi::TimePrecision_option{ {}, false }), + alignment.has_value() ? (icu4x::capi::DateTimeAlignment_option{ { alignment.value().AsFFI() }, true }) : (icu4x::capi::DateTimeAlignment_option{ {}, false }), + year_style.has_value() ? (icu4x::capi::YearStyle_option{ { year_style.value().AsFFI() }, true }) : (icu4x::capi::YearStyle_option{ {}, false })); + return result.is_ok ? diplomat::result, icu4x::DateTimeFormatterLoadError>(diplomat::Ok>(std::unique_ptr(icu4x::DateTimeFormatterGregorian::FromFFI(result.ok)))) : diplomat::result, icu4x::DateTimeFormatterLoadError>(diplomat::Err(icu4x::DateTimeFormatterLoadError::FromFFI(result.err))); +} + +inline diplomat::result, icu4x::DateTimeFormatterLoadError> icu4x::DateTimeFormatterGregorian::create_et(const icu4x::Locale& locale, std::optional length, std::optional time_precision, std::optional alignment) { + auto result = icu4x::capi::icu4x_DateTimeFormatterGregorian_create_et_mv1(locale.AsFFI(), + length.has_value() ? (icu4x::capi::DateTimeLength_option{ { length.value().AsFFI() }, true }) : (icu4x::capi::DateTimeLength_option{ {}, false }), + time_precision.has_value() ? (icu4x::capi::TimePrecision_option{ { time_precision.value().AsFFI() }, true }) : (icu4x::capi::TimePrecision_option{ {}, false }), + alignment.has_value() ? (icu4x::capi::DateTimeAlignment_option{ { alignment.value().AsFFI() }, true }) : (icu4x::capi::DateTimeAlignment_option{ {}, false })); + return result.is_ok ? diplomat::result, icu4x::DateTimeFormatterLoadError>(diplomat::Ok>(std::unique_ptr(icu4x::DateTimeFormatterGregorian::FromFFI(result.ok)))) : diplomat::result, icu4x::DateTimeFormatterLoadError>(diplomat::Err(icu4x::DateTimeFormatterLoadError::FromFFI(result.err))); +} + +inline diplomat::result, icu4x::DateTimeFormatterLoadError> icu4x::DateTimeFormatterGregorian::create_et_with_provider(const icu4x::DataProvider& provider, const icu4x::Locale& locale, std::optional length, std::optional time_precision, std::optional alignment) { + auto result = icu4x::capi::icu4x_DateTimeFormatterGregorian_create_et_with_provider_mv1(provider.AsFFI(), + locale.AsFFI(), + length.has_value() ? (icu4x::capi::DateTimeLength_option{ { length.value().AsFFI() }, true }) : (icu4x::capi::DateTimeLength_option{ {}, false }), + time_precision.has_value() ? (icu4x::capi::TimePrecision_option{ { time_precision.value().AsFFI() }, true }) : (icu4x::capi::TimePrecision_option{ {}, false }), + alignment.has_value() ? (icu4x::capi::DateTimeAlignment_option{ { alignment.value().AsFFI() }, true }) : (icu4x::capi::DateTimeAlignment_option{ {}, false })); + return result.is_ok ? diplomat::result, icu4x::DateTimeFormatterLoadError>(diplomat::Ok>(std::unique_ptr(icu4x::DateTimeFormatterGregorian::FromFFI(result.ok)))) : diplomat::result, icu4x::DateTimeFormatterLoadError>(diplomat::Err(icu4x::DateTimeFormatterLoadError::FromFFI(result.err))); +} + +inline std::string icu4x::DateTimeFormatterGregorian::format_iso(const icu4x::IsoDate& date, const icu4x::Time& time) const { + std::string output; + diplomat::capi::DiplomatWrite write = diplomat::WriteFromString(output); + icu4x::capi::icu4x_DateTimeFormatterGregorian_format_iso_mv1(this->AsFFI(), + date.AsFFI(), + time.AsFFI(), + &write); + return output; +} + +inline const icu4x::capi::DateTimeFormatterGregorian* icu4x::DateTimeFormatterGregorian::AsFFI() const { + return reinterpret_cast(this); +} + +inline icu4x::capi::DateTimeFormatterGregorian* icu4x::DateTimeFormatterGregorian::AsFFI() { + return reinterpret_cast(this); +} + +inline const icu4x::DateTimeFormatterGregorian* icu4x::DateTimeFormatterGregorian::FromFFI(const icu4x::capi::DateTimeFormatterGregorian* ptr) { + return reinterpret_cast(ptr); +} + +inline icu4x::DateTimeFormatterGregorian* icu4x::DateTimeFormatterGregorian::FromFFI(icu4x::capi::DateTimeFormatterGregorian* ptr) { + return reinterpret_cast(ptr); +} + +inline void icu4x::DateTimeFormatterGregorian::operator delete(void* ptr) { + icu4x::capi::icu4x_DateTimeFormatterGregorian_destroy_mv1(reinterpret_cast(ptr)); +} + + +#endif // icu4x_DateTimeFormatterGregorian_HPP diff --git a/ffi/capi/bindings/cpp/icu4x/DateTimeMismatchedCalendarError.d.hpp b/ffi/capi/bindings/cpp/icu4x/DateTimeMismatchedCalendarError.d.hpp new file mode 100644 index 00000000000..0ee3542153c --- /dev/null +++ b/ffi/capi/bindings/cpp/icu4x/DateTimeMismatchedCalendarError.d.hpp @@ -0,0 +1,41 @@ +#ifndef icu4x_DateTimeMismatchedCalendarError_D_HPP +#define icu4x_DateTimeMismatchedCalendarError_D_HPP + +#include +#include +#include +#include +#include +#include +#include +#include "../diplomat_runtime.hpp" +#include "AnyCalendarKind.d.hpp" + +namespace icu4x { +class AnyCalendarKind; +} + + +namespace icu4x { +namespace capi { + struct DateTimeMismatchedCalendarError { + icu4x::capi::AnyCalendarKind this_kind; + icu4x::capi::AnyCalendarKind_option date_kind; + }; + + typedef struct DateTimeMismatchedCalendarError_option {union { DateTimeMismatchedCalendarError ok; }; bool is_ok; } DateTimeMismatchedCalendarError_option; +} // namespace capi +} // namespace + + +namespace icu4x { +struct DateTimeMismatchedCalendarError { + icu4x::AnyCalendarKind this_kind; + std::optional date_kind; + + inline icu4x::capi::DateTimeMismatchedCalendarError AsFFI() const; + inline static icu4x::DateTimeMismatchedCalendarError FromFFI(icu4x::capi::DateTimeMismatchedCalendarError c_struct); +}; + +} // namespace +#endif // icu4x_DateTimeMismatchedCalendarError_D_HPP diff --git a/ffi/capi/bindings/cpp/icu4x/DateTimeMismatchedCalendarError.hpp b/ffi/capi/bindings/cpp/icu4x/DateTimeMismatchedCalendarError.hpp new file mode 100644 index 00000000000..9bb34ae80a5 --- /dev/null +++ b/ffi/capi/bindings/cpp/icu4x/DateTimeMismatchedCalendarError.hpp @@ -0,0 +1,42 @@ +#ifndef icu4x_DateTimeMismatchedCalendarError_HPP +#define icu4x_DateTimeMismatchedCalendarError_HPP + +#include "DateTimeMismatchedCalendarError.d.hpp" + +#include +#include +#include +#include +#include +#include +#include +#include "../diplomat_runtime.hpp" +#include "AnyCalendarKind.hpp" + + +namespace icu4x { +namespace capi { + extern "C" { + + + } // extern "C" +} // namespace capi +} // namespace + + +inline icu4x::capi::DateTimeMismatchedCalendarError icu4x::DateTimeMismatchedCalendarError::AsFFI() const { + return icu4x::capi::DateTimeMismatchedCalendarError { + /* .this_kind = */ this_kind.AsFFI(), + /* .date_kind = */ date_kind.has_value() ? (icu4x::capi::AnyCalendarKind_option{ { date_kind.value().AsFFI() }, true }) : (icu4x::capi::AnyCalendarKind_option{ {}, false }), + }; +} + +inline icu4x::DateTimeMismatchedCalendarError icu4x::DateTimeMismatchedCalendarError::FromFFI(icu4x::capi::DateTimeMismatchedCalendarError c_struct) { + return icu4x::DateTimeMismatchedCalendarError { + /* .this_kind = */ icu4x::AnyCalendarKind::FromFFI(c_struct.this_kind), + /* .date_kind = */ c_struct.date_kind.is_ok ? std::optional(icu4x::AnyCalendarKind::FromFFI(c_struct.date_kind.ok)) : std::nullopt, + }; +} + + +#endif // icu4x_DateTimeMismatchedCalendarError_HPP diff --git a/ffi/capi/bindings/cpp/icu4x/GregorianDateTimeFormatter.d.hpp b/ffi/capi/bindings/cpp/icu4x/GregorianDateTimeFormatter.d.hpp deleted file mode 100644 index 9aeeb4f01ac..00000000000 --- a/ffi/capi/bindings/cpp/icu4x/GregorianDateTimeFormatter.d.hpp +++ /dev/null @@ -1,60 +0,0 @@ -#ifndef icu4x_GregorianDateTimeFormatter_D_HPP -#define icu4x_GregorianDateTimeFormatter_D_HPP - -#include -#include -#include -#include -#include -#include -#include -#include "../diplomat_runtime.hpp" - -namespace icu4x { -namespace capi { struct DataProvider; } -class DataProvider; -namespace capi { struct GregorianDateTimeFormatter; } -class GregorianDateTimeFormatter; -namespace capi { struct IsoDate; } -class IsoDate; -namespace capi { struct Locale; } -class Locale; -namespace capi { struct Time; } -class Time; -class DateTimeFormatterLoadError; -class DateTimeLength; -} - - -namespace icu4x { -namespace capi { - struct GregorianDateTimeFormatter; -} // namespace capi -} // namespace - -namespace icu4x { -class GregorianDateTimeFormatter { -public: - - inline static diplomat::result, icu4x::DateTimeFormatterLoadError> create_with_length(const icu4x::Locale& locale, icu4x::DateTimeLength length); - - inline static diplomat::result, icu4x::DateTimeFormatterLoadError> create_with_length_and_provider(const icu4x::DataProvider& provider, const icu4x::Locale& locale, icu4x::DateTimeLength length); - - inline std::string format_iso(const icu4x::IsoDate& date, const icu4x::Time& time) const; - - inline const icu4x::capi::GregorianDateTimeFormatter* AsFFI() const; - inline icu4x::capi::GregorianDateTimeFormatter* AsFFI(); - inline static const icu4x::GregorianDateTimeFormatter* FromFFI(const icu4x::capi::GregorianDateTimeFormatter* ptr); - inline static icu4x::GregorianDateTimeFormatter* FromFFI(icu4x::capi::GregorianDateTimeFormatter* ptr); - inline static void operator delete(void* ptr); -private: - GregorianDateTimeFormatter() = delete; - GregorianDateTimeFormatter(const icu4x::GregorianDateTimeFormatter&) = delete; - GregorianDateTimeFormatter(icu4x::GregorianDateTimeFormatter&&) noexcept = delete; - GregorianDateTimeFormatter operator=(const icu4x::GregorianDateTimeFormatter&) = delete; - GregorianDateTimeFormatter operator=(icu4x::GregorianDateTimeFormatter&&) noexcept = delete; - static void operator delete[](void*, size_t) = delete; -}; - -} // namespace -#endif // icu4x_GregorianDateTimeFormatter_D_HPP diff --git a/ffi/capi/bindings/cpp/icu4x/GregorianDateTimeFormatter.hpp b/ffi/capi/bindings/cpp/icu4x/GregorianDateTimeFormatter.hpp deleted file mode 100644 index aa591281614..00000000000 --- a/ffi/capi/bindings/cpp/icu4x/GregorianDateTimeFormatter.hpp +++ /dev/null @@ -1,85 +0,0 @@ -#ifndef icu4x_GregorianDateTimeFormatter_HPP -#define icu4x_GregorianDateTimeFormatter_HPP - -#include "GregorianDateTimeFormatter.d.hpp" - -#include -#include -#include -#include -#include -#include -#include -#include "../diplomat_runtime.hpp" -#include "DataProvider.hpp" -#include "DateTimeFormatterLoadError.hpp" -#include "DateTimeLength.hpp" -#include "IsoDate.hpp" -#include "Locale.hpp" -#include "Time.hpp" - - -namespace icu4x { -namespace capi { - extern "C" { - - typedef struct icu4x_GregorianDateTimeFormatter_create_with_length_mv1_result {union {icu4x::capi::GregorianDateTimeFormatter* ok; icu4x::capi::DateTimeFormatterLoadError err;}; bool is_ok;} icu4x_GregorianDateTimeFormatter_create_with_length_mv1_result; - icu4x_GregorianDateTimeFormatter_create_with_length_mv1_result icu4x_GregorianDateTimeFormatter_create_with_length_mv1(const icu4x::capi::Locale* locale, icu4x::capi::DateTimeLength length); - - typedef struct icu4x_GregorianDateTimeFormatter_create_with_length_and_provider_mv1_result {union {icu4x::capi::GregorianDateTimeFormatter* ok; icu4x::capi::DateTimeFormatterLoadError err;}; bool is_ok;} icu4x_GregorianDateTimeFormatter_create_with_length_and_provider_mv1_result; - icu4x_GregorianDateTimeFormatter_create_with_length_and_provider_mv1_result icu4x_GregorianDateTimeFormatter_create_with_length_and_provider_mv1(const icu4x::capi::DataProvider* provider, const icu4x::capi::Locale* locale, icu4x::capi::DateTimeLength length); - - void icu4x_GregorianDateTimeFormatter_format_iso_mv1(const icu4x::capi::GregorianDateTimeFormatter* self, const icu4x::capi::IsoDate* date, const icu4x::capi::Time* time, diplomat::capi::DiplomatWrite* write); - - - void icu4x_GregorianDateTimeFormatter_destroy_mv1(GregorianDateTimeFormatter* self); - - } // extern "C" -} // namespace capi -} // namespace - -inline diplomat::result, icu4x::DateTimeFormatterLoadError> icu4x::GregorianDateTimeFormatter::create_with_length(const icu4x::Locale& locale, icu4x::DateTimeLength length) { - auto result = icu4x::capi::icu4x_GregorianDateTimeFormatter_create_with_length_mv1(locale.AsFFI(), - length.AsFFI()); - return result.is_ok ? diplomat::result, icu4x::DateTimeFormatterLoadError>(diplomat::Ok>(std::unique_ptr(icu4x::GregorianDateTimeFormatter::FromFFI(result.ok)))) : diplomat::result, icu4x::DateTimeFormatterLoadError>(diplomat::Err(icu4x::DateTimeFormatterLoadError::FromFFI(result.err))); -} - -inline diplomat::result, icu4x::DateTimeFormatterLoadError> icu4x::GregorianDateTimeFormatter::create_with_length_and_provider(const icu4x::DataProvider& provider, const icu4x::Locale& locale, icu4x::DateTimeLength length) { - auto result = icu4x::capi::icu4x_GregorianDateTimeFormatter_create_with_length_and_provider_mv1(provider.AsFFI(), - locale.AsFFI(), - length.AsFFI()); - return result.is_ok ? diplomat::result, icu4x::DateTimeFormatterLoadError>(diplomat::Ok>(std::unique_ptr(icu4x::GregorianDateTimeFormatter::FromFFI(result.ok)))) : diplomat::result, icu4x::DateTimeFormatterLoadError>(diplomat::Err(icu4x::DateTimeFormatterLoadError::FromFFI(result.err))); -} - -inline std::string icu4x::GregorianDateTimeFormatter::format_iso(const icu4x::IsoDate& date, const icu4x::Time& time) const { - std::string output; - diplomat::capi::DiplomatWrite write = diplomat::WriteFromString(output); - icu4x::capi::icu4x_GregorianDateTimeFormatter_format_iso_mv1(this->AsFFI(), - date.AsFFI(), - time.AsFFI(), - &write); - return output; -} - -inline const icu4x::capi::GregorianDateTimeFormatter* icu4x::GregorianDateTimeFormatter::AsFFI() const { - return reinterpret_cast(this); -} - -inline icu4x::capi::GregorianDateTimeFormatter* icu4x::GregorianDateTimeFormatter::AsFFI() { - return reinterpret_cast(this); -} - -inline const icu4x::GregorianDateTimeFormatter* icu4x::GregorianDateTimeFormatter::FromFFI(const icu4x::capi::GregorianDateTimeFormatter* ptr) { - return reinterpret_cast(ptr); -} - -inline icu4x::GregorianDateTimeFormatter* icu4x::GregorianDateTimeFormatter::FromFFI(icu4x::capi::GregorianDateTimeFormatter* ptr) { - return reinterpret_cast(ptr); -} - -inline void icu4x::GregorianDateTimeFormatter::operator delete(void* ptr) { - icu4x::capi::icu4x_GregorianDateTimeFormatter_destroy_mv1(reinterpret_cast(ptr)); -} - - -#endif // icu4x_GregorianDateTimeFormatter_HPP diff --git a/ffi/capi/bindings/cpp/icu4x/TimePrecision.d.hpp b/ffi/capi/bindings/cpp/icu4x/TimePrecision.d.hpp new file mode 100644 index 00000000000..6f65db2ece8 --- /dev/null +++ b/ffi/capi/bindings/cpp/icu4x/TimePrecision.d.hpp @@ -0,0 +1,69 @@ +#ifndef icu4x_TimePrecision_D_HPP +#define icu4x_TimePrecision_D_HPP + +#include +#include +#include +#include +#include +#include +#include +#include "../diplomat_runtime.hpp" + + +namespace icu4x { +namespace capi { + enum TimePrecision { + TimePrecision_Hour = 0, + TimePrecision_Minute = 1, + TimePrecision_MinuteOptional = 2, + TimePrecision_Second = 3, + TimePrecision_SecondF1 = 4, + TimePrecision_SecondF2 = 5, + TimePrecision_SecondF3 = 6, + TimePrecision_SecondF4 = 7, + TimePrecision_SecondF5 = 8, + TimePrecision_SecondF6 = 9, + TimePrecision_SecondF7 = 10, + TimePrecision_SecondF8 = 11, + TimePrecision_SecondF9 = 12, + }; + + typedef struct TimePrecision_option {union { TimePrecision ok; }; bool is_ok; } TimePrecision_option; +} // namespace capi +} // namespace + +namespace icu4x { +class TimePrecision { +public: + enum Value { + Hour = 0, + Minute = 1, + MinuteOptional = 2, + Second = 3, + SecondF1 = 4, + SecondF2 = 5, + SecondF3 = 6, + SecondF4 = 7, + SecondF5 = 8, + SecondF6 = 9, + SecondF7 = 10, + SecondF8 = 11, + SecondF9 = 12, + }; + + TimePrecision() = default; + // Implicit conversions between enum and ::Value + constexpr TimePrecision(Value v) : value(v) {} + constexpr operator Value() const { return value; } + // Prevent usage as boolean value + explicit operator bool() const = delete; + + inline icu4x::capi::TimePrecision AsFFI() const; + inline static icu4x::TimePrecision FromFFI(icu4x::capi::TimePrecision c_enum); +private: + Value value; +}; + +} // namespace +#endif // icu4x_TimePrecision_D_HPP diff --git a/ffi/capi/bindings/cpp/icu4x/TimePrecision.hpp b/ffi/capi/bindings/cpp/icu4x/TimePrecision.hpp new file mode 100644 index 00000000000..14efa2c27dd --- /dev/null +++ b/ffi/capi/bindings/cpp/icu4x/TimePrecision.hpp @@ -0,0 +1,49 @@ +#ifndef icu4x_TimePrecision_HPP +#define icu4x_TimePrecision_HPP + +#include "TimePrecision.d.hpp" + +#include +#include +#include +#include +#include +#include +#include +#include "../diplomat_runtime.hpp" + + +namespace icu4x { +namespace capi { + extern "C" { + + + } // extern "C" +} // namespace capi +} // namespace + +inline icu4x::capi::TimePrecision icu4x::TimePrecision::AsFFI() const { + return static_cast(value); +} + +inline icu4x::TimePrecision icu4x::TimePrecision::FromFFI(icu4x::capi::TimePrecision c_enum) { + switch (c_enum) { + case icu4x::capi::TimePrecision_Hour: + case icu4x::capi::TimePrecision_Minute: + case icu4x::capi::TimePrecision_MinuteOptional: + case icu4x::capi::TimePrecision_Second: + case icu4x::capi::TimePrecision_SecondF1: + case icu4x::capi::TimePrecision_SecondF2: + case icu4x::capi::TimePrecision_SecondF3: + case icu4x::capi::TimePrecision_SecondF4: + case icu4x::capi::TimePrecision_SecondF5: + case icu4x::capi::TimePrecision_SecondF6: + case icu4x::capi::TimePrecision_SecondF7: + case icu4x::capi::TimePrecision_SecondF8: + case icu4x::capi::TimePrecision_SecondF9: + return static_cast(c_enum); + default: + abort(); + } +} +#endif // icu4x_TimePrecision_HPP diff --git a/ffi/capi/bindings/cpp/icu4x/YearStyle.d.hpp b/ffi/capi/bindings/cpp/icu4x/YearStyle.d.hpp new file mode 100644 index 00000000000..bbf079845eb --- /dev/null +++ b/ffi/capi/bindings/cpp/icu4x/YearStyle.d.hpp @@ -0,0 +1,49 @@ +#ifndef icu4x_YearStyle_D_HPP +#define icu4x_YearStyle_D_HPP + +#include +#include +#include +#include +#include +#include +#include +#include "../diplomat_runtime.hpp" + + +namespace icu4x { +namespace capi { + enum YearStyle { + YearStyle_Auto = 0, + YearStyle_Full = 1, + YearStyle_WithEra = 2, + }; + + typedef struct YearStyle_option {union { YearStyle ok; }; bool is_ok; } YearStyle_option; +} // namespace capi +} // namespace + +namespace icu4x { +class YearStyle { +public: + enum Value { + Auto = 0, + Full = 1, + WithEra = 2, + }; + + YearStyle() = default; + // Implicit conversions between enum and ::Value + constexpr YearStyle(Value v) : value(v) {} + constexpr operator Value() const { return value; } + // Prevent usage as boolean value + explicit operator bool() const = delete; + + inline icu4x::capi::YearStyle AsFFI() const; + inline static icu4x::YearStyle FromFFI(icu4x::capi::YearStyle c_enum); +private: + Value value; +}; + +} // namespace +#endif // icu4x_YearStyle_D_HPP diff --git a/ffi/capi/bindings/cpp/icu4x/YearStyle.hpp b/ffi/capi/bindings/cpp/icu4x/YearStyle.hpp new file mode 100644 index 00000000000..93be6d35982 --- /dev/null +++ b/ffi/capi/bindings/cpp/icu4x/YearStyle.hpp @@ -0,0 +1,39 @@ +#ifndef icu4x_YearStyle_HPP +#define icu4x_YearStyle_HPP + +#include "YearStyle.d.hpp" + +#include +#include +#include +#include +#include +#include +#include +#include "../diplomat_runtime.hpp" + + +namespace icu4x { +namespace capi { + extern "C" { + + + } // extern "C" +} // namespace capi +} // namespace + +inline icu4x::capi::YearStyle icu4x::YearStyle::AsFFI() const { + return static_cast(value); +} + +inline icu4x::YearStyle icu4x::YearStyle::FromFFI(icu4x::capi::YearStyle c_enum) { + switch (c_enum) { + case icu4x::capi::YearStyle_Auto: + case icu4x::capi::YearStyle_Full: + case icu4x::capi::YearStyle_WithEra: + return static_cast(c_enum); + default: + abort(); + } +} +#endif // icu4x_YearStyle_HPP diff --git a/ffi/capi/bindings/dart/DateTimeAlignment.g.dart b/ffi/capi/bindings/dart/DateTimeAlignment.g.dart new file mode 100644 index 00000000000..26e333b1e47 --- /dev/null +++ b/ffi/capi/bindings/dart/DateTimeAlignment.g.dart @@ -0,0 +1,10 @@ +// generated by diplomat-tool + +part of 'lib.g.dart'; + +/// See the [Rust documentation for `Alignment`](https://docs.rs/icu/latest/icu/datetime/enum.Alignment.html) for more information. +enum DateTimeAlignment { + auto, + + column; +} diff --git a/ffi/capi/bindings/dart/DateTimeFormatter.g.dart b/ffi/capi/bindings/dart/DateTimeFormatter.g.dart index 1cbe946f109..4c677c5687d 100644 --- a/ffi/capi/bindings/dart/DateTimeFormatter.g.dart +++ b/ffi/capi/bindings/dart/DateTimeFormatter.g.dart @@ -2,12 +2,7 @@ part of 'lib.g.dart'; -/// An ICU4X DateFormatter object capable of formatting a [`Date`] and a [`Time`] as a string, -/// using some calendar specified at runtime in the locale. -/// -/// See the [Rust documentation for `DateTimeFormatter`](https://docs.rs/icu/latest/icu/datetime/struct.DateTimeFormatter.html) for more information. -/// -/// Additional information: [1](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.YMDT.html) +/// See the [Rust documentation for `DateTimeFormatter`](https://docs.rs/icu/latest/icu/datetime/type.DateTimeFormatter.html) for more information. final class DateTimeFormatter implements ffi.Finalizable { final ffi.Pointer _ffi; @@ -27,68 +22,207 @@ final class DateTimeFormatter implements ffi.Finalizable { static final _finalizer = ffi.NativeFinalizer(ffi.Native.addressOf(_icu4x_DateTimeFormatter_destroy_mv1)); - /// Creates a new [`DateTimeFormatter`] using compiled data. + /// See the [Rust documentation for `DT`](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.DT.html) for more information. /// - /// See the [Rust documentation for `try_new`](https://docs.rs/icu/latest/icu/datetime/struct.DateTimeFormatter.html#method.try_new) for more information. + /// Additional information: [1](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.DT.html#method.with_length), [2](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.DT.html#method.with_time_precision), [3](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.DT.html#method.with_alignment) /// /// Throws [DateTimeFormatterLoadError] on failure. - factory DateTimeFormatter.withLength(Locale locale, DateTimeLength length) { - final result = _icu4x_DateTimeFormatter_create_with_length_mv1(locale._ffi, length.index); + factory DateTimeFormatter.dt(Locale locale, {DateTimeLength? length, TimePrecision? timePrecision, DateTimeAlignment? alignment}) { + final result = _icu4x_DateTimeFormatter_create_dt_mv1(locale._ffi, length != null ? _ResultInt32Void.ok(length.index) : _ResultInt32Void.err(), timePrecision != null ? _ResultInt32Void.ok(timePrecision.index) : _ResultInt32Void.err(), alignment != null ? _ResultInt32Void.ok(alignment.index) : _ResultInt32Void.err()); if (!result.isOk) { throw DateTimeFormatterLoadError.values.firstWhere((v) => v._ffi == result.union.err); } return DateTimeFormatter._fromFfi(result.union.ok, []); } - /// Creates a new [`DateTimeFormatter`] using a particular data source. + /// See the [Rust documentation for `DT`](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.DT.html) for more information. /// - /// See the [Rust documentation for `try_new`](https://docs.rs/icu/latest/icu/datetime/struct.DateTimeFormatter.html#method.try_new) for more information. + /// See the [Rust documentation for `DT`](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.DT.html) for more information. + /// + /// Additional information: [1](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.DT.html#method.with_length), [2](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.DT.html#method.with_time_precision), [3](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.DT.html#method.with_alignment) /// /// Throws [DateTimeFormatterLoadError] on failure. - factory DateTimeFormatter.withLengthAndProvider(DataProvider provider, Locale locale, DateTimeLength length) { - final result = _icu4x_DateTimeFormatter_create_with_length_and_provider_mv1(provider._ffi, locale._ffi, length.index); + factory DateTimeFormatter.dtWithProvider(DataProvider provider, Locale locale, {DateTimeLength? length, TimePrecision? timePrecision, DateTimeAlignment? alignment}) { + final result = _icu4x_DateTimeFormatter_create_dt_with_provider_mv1(provider._ffi, locale._ffi, length != null ? _ResultInt32Void.ok(length.index) : _ResultInt32Void.err(), timePrecision != null ? _ResultInt32Void.ok(timePrecision.index) : _ResultInt32Void.err(), alignment != null ? _ResultInt32Void.ok(alignment.index) : _ResultInt32Void.err()); if (!result.isOk) { throw DateTimeFormatterLoadError.values.firstWhere((v) => v._ffi == result.union.err); } return DateTimeFormatter._fromFfi(result.union.ok, []); } - /// Formats a [`Date`] and a [`Time`] to a string. + /// See the [Rust documentation for `MDT`](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.MDT.html) for more information. /// - /// See the [Rust documentation for `format`](https://docs.rs/icu/latest/icu/datetime/struct.DateTimeFormatter.html#method.format) for more information. + /// Additional information: [1](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.MDT.html#method.with_length), [2](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.MDT.html#method.with_time_precision), [3](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.MDT.html#method.with_alignment) /// - /// Throws [DateTimeFormatError] on failure. - String format(Date date, Time time) { - final write = _Write(); - final result = _icu4x_DateTimeFormatter_format_mv1(_ffi, date._ffi, time._ffi, write._ffi); + /// Throws [DateTimeFormatterLoadError] on failure. + factory DateTimeFormatter.mdt(Locale locale, {DateTimeLength? length, TimePrecision? timePrecision, DateTimeAlignment? alignment}) { + final result = _icu4x_DateTimeFormatter_create_mdt_mv1(locale._ffi, length != null ? _ResultInt32Void.ok(length.index) : _ResultInt32Void.err(), timePrecision != null ? _ResultInt32Void.ok(timePrecision.index) : _ResultInt32Void.err(), alignment != null ? _ResultInt32Void.ok(alignment.index) : _ResultInt32Void.err()); if (!result.isOk) { - throw DateTimeFormatError.values.firstWhere((v) => v._ffi == result.union.err); + throw DateTimeFormatterLoadError.values.firstWhere((v) => v._ffi == result.union.err); } - return write.finalize(); + return DateTimeFormatter._fromFfi(result.union.ok, []); } - /// Formats an [`IsoDate`] and a [`Time`] to a string. + /// See the [Rust documentation for `MDT`](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.MDT.html) for more information. /// - /// Will convert to this formatter's calendar first + /// Additional information: [1](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.MDT.html#method.with_length), [2](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.MDT.html#method.with_time_precision), [3](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.MDT.html#method.with_alignment) /// - /// See the [Rust documentation for `format`](https://docs.rs/icu/latest/icu/datetime/struct.DateTimeFormatter.html#method.format) for more information. + /// Throws [DateTimeFormatterLoadError] on failure. + factory DateTimeFormatter.mdtWithProvider(DataProvider provider, Locale locale, {DateTimeLength? length, TimePrecision? timePrecision, DateTimeAlignment? alignment}) { + final result = _icu4x_DateTimeFormatter_create_mdt_with_provider_mv1(provider._ffi, locale._ffi, length != null ? _ResultInt32Void.ok(length.index) : _ResultInt32Void.err(), timePrecision != null ? _ResultInt32Void.ok(timePrecision.index) : _ResultInt32Void.err(), alignment != null ? _ResultInt32Void.ok(alignment.index) : _ResultInt32Void.err()); + if (!result.isOk) { + throw DateTimeFormatterLoadError.values.firstWhere((v) => v._ffi == result.union.err); + } + return DateTimeFormatter._fromFfi(result.union.ok, []); + } + + /// See the [Rust documentation for `YMDT`](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.YMDT.html) for more information. /// - /// Throws [DateTimeFormatError] on failure. - String formatIso(IsoDate date, Time time) { - final write = _Write(); - final result = _icu4x_DateTimeFormatter_format_iso_mv1(_ffi, date._ffi, time._ffi, write._ffi); + /// Additional information: [1](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.YMDT.html#method.with_length), [2](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.YMDT.html#method.with_time_precision), [3](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.YMDT.html#method.with_alignment), [4](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.YMDT.html#method.with_year_style) + /// + /// Throws [DateTimeFormatterLoadError] on failure. + factory DateTimeFormatter.ymdt(Locale locale, {DateTimeLength? length, TimePrecision? timePrecision, DateTimeAlignment? alignment, YearStyle? yearStyle}) { + final result = _icu4x_DateTimeFormatter_create_ymdt_mv1(locale._ffi, length != null ? _ResultInt32Void.ok(length.index) : _ResultInt32Void.err(), timePrecision != null ? _ResultInt32Void.ok(timePrecision.index) : _ResultInt32Void.err(), alignment != null ? _ResultInt32Void.ok(alignment.index) : _ResultInt32Void.err(), yearStyle != null ? _ResultInt32Void.ok(yearStyle.index) : _ResultInt32Void.err()); + if (!result.isOk) { + throw DateTimeFormatterLoadError.values.firstWhere((v) => v._ffi == result.union.err); + } + return DateTimeFormatter._fromFfi(result.union.ok, []); + } + + /// See the [Rust documentation for `YMDT`](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.YMDT.html) for more information. + /// + /// Additional information: [1](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.YMDT.html#method.with_length), [2](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.YMDT.html#method.with_time_precision), [3](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.YMDT.html#method.with_alignment), [4](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.YMDT.html#method.with_year_style) + /// + /// Throws [DateTimeFormatterLoadError] on failure. + factory DateTimeFormatter.ymdtWithProvider(DataProvider provider, Locale locale, {DateTimeLength? length, TimePrecision? timePrecision, DateTimeAlignment? alignment, YearStyle? yearStyle}) { + final result = _icu4x_DateTimeFormatter_create_ymdt_with_provider_mv1(provider._ffi, locale._ffi, length != null ? _ResultInt32Void.ok(length.index) : _ResultInt32Void.err(), timePrecision != null ? _ResultInt32Void.ok(timePrecision.index) : _ResultInt32Void.err(), alignment != null ? _ResultInt32Void.ok(alignment.index) : _ResultInt32Void.err(), yearStyle != null ? _ResultInt32Void.ok(yearStyle.index) : _ResultInt32Void.err()); + if (!result.isOk) { + throw DateTimeFormatterLoadError.values.firstWhere((v) => v._ffi == result.union.err); + } + return DateTimeFormatter._fromFfi(result.union.ok, []); + } + + /// See the [Rust documentation for `DET`](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.DET.html) for more information. + /// + /// Additional information: [1](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.DET.html#method.with_length), [2](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.DET.html#method.with_time_precision), [3](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.DET.html#method.with_alignment) + /// + /// Throws [DateTimeFormatterLoadError] on failure. + factory DateTimeFormatter.det(Locale locale, {DateTimeLength? length, TimePrecision? timePrecision, DateTimeAlignment? alignment}) { + final result = _icu4x_DateTimeFormatter_create_det_mv1(locale._ffi, length != null ? _ResultInt32Void.ok(length.index) : _ResultInt32Void.err(), timePrecision != null ? _ResultInt32Void.ok(timePrecision.index) : _ResultInt32Void.err(), alignment != null ? _ResultInt32Void.ok(alignment.index) : _ResultInt32Void.err()); + if (!result.isOk) { + throw DateTimeFormatterLoadError.values.firstWhere((v) => v._ffi == result.union.err); + } + return DateTimeFormatter._fromFfi(result.union.ok, []); + } + + /// See the [Rust documentation for `DET`](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.DET.html) for more information. + /// + /// Additional information: [1](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.DET.html#method.with_length), [2](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.DET.html#method.with_time_precision), [3](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.DET.html#method.with_alignment) + /// + /// Throws [DateTimeFormatterLoadError] on failure. + factory DateTimeFormatter.detWithProvider(DataProvider provider, Locale locale, {DateTimeLength? length, TimePrecision? timePrecision, DateTimeAlignment? alignment}) { + final result = _icu4x_DateTimeFormatter_create_det_with_provider_mv1(provider._ffi, locale._ffi, length != null ? _ResultInt32Void.ok(length.index) : _ResultInt32Void.err(), timePrecision != null ? _ResultInt32Void.ok(timePrecision.index) : _ResultInt32Void.err(), alignment != null ? _ResultInt32Void.ok(alignment.index) : _ResultInt32Void.err()); + if (!result.isOk) { + throw DateTimeFormatterLoadError.values.firstWhere((v) => v._ffi == result.union.err); + } + return DateTimeFormatter._fromFfi(result.union.ok, []); + } + + /// See the [Rust documentation for `MDET`](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.MDET.html) for more information. + /// + /// Additional information: [1](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.MDET.html#method.with_length), [2](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.MDET.html#method.with_time_precision), [3](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.MDET.html#method.with_alignment) + /// + /// Throws [DateTimeFormatterLoadError] on failure. + factory DateTimeFormatter.mdet(Locale locale, {DateTimeLength? length, TimePrecision? timePrecision, DateTimeAlignment? alignment}) { + final result = _icu4x_DateTimeFormatter_create_mdet_mv1(locale._ffi, length != null ? _ResultInt32Void.ok(length.index) : _ResultInt32Void.err(), timePrecision != null ? _ResultInt32Void.ok(timePrecision.index) : _ResultInt32Void.err(), alignment != null ? _ResultInt32Void.ok(alignment.index) : _ResultInt32Void.err()); + if (!result.isOk) { + throw DateTimeFormatterLoadError.values.firstWhere((v) => v._ffi == result.union.err); + } + return DateTimeFormatter._fromFfi(result.union.ok, []); + } + + /// See the [Rust documentation for `MDET`](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.MDET.html) for more information. + /// + /// Additional information: [1](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.MDET.html#method.with_length), [2](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.MDET.html#method.with_time_precision), [3](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.MDET.html#method.with_alignment) + /// + /// Throws [DateTimeFormatterLoadError] on failure. + factory DateTimeFormatter.mdetWithProvider(DataProvider provider, Locale locale, {DateTimeLength? length, TimePrecision? timePrecision, DateTimeAlignment? alignment}) { + final result = _icu4x_DateTimeFormatter_create_mdet_with_provider_mv1(provider._ffi, locale._ffi, length != null ? _ResultInt32Void.ok(length.index) : _ResultInt32Void.err(), timePrecision != null ? _ResultInt32Void.ok(timePrecision.index) : _ResultInt32Void.err(), alignment != null ? _ResultInt32Void.ok(alignment.index) : _ResultInt32Void.err()); + if (!result.isOk) { + throw DateTimeFormatterLoadError.values.firstWhere((v) => v._ffi == result.union.err); + } + return DateTimeFormatter._fromFfi(result.union.ok, []); + } + + /// See the [Rust documentation for `YMDET`](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.YMDET.html) for more information. + /// + /// Additional information: [1](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.YMDET.html#method.with_length), [2](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.YMDET.html#method.with_time_precision), [3](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.YMDET.html#method.with_alignment), [4](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.YMDET.html#method.with_year_style) + /// + /// Throws [DateTimeFormatterLoadError] on failure. + factory DateTimeFormatter.ymdet(Locale locale, {DateTimeLength? length, TimePrecision? timePrecision, DateTimeAlignment? alignment, YearStyle? yearStyle}) { + final result = _icu4x_DateTimeFormatter_create_ymdet_mv1(locale._ffi, length != null ? _ResultInt32Void.ok(length.index) : _ResultInt32Void.err(), timePrecision != null ? _ResultInt32Void.ok(timePrecision.index) : _ResultInt32Void.err(), alignment != null ? _ResultInt32Void.ok(alignment.index) : _ResultInt32Void.err(), yearStyle != null ? _ResultInt32Void.ok(yearStyle.index) : _ResultInt32Void.err()); + if (!result.isOk) { + throw DateTimeFormatterLoadError.values.firstWhere((v) => v._ffi == result.union.err); + } + return DateTimeFormatter._fromFfi(result.union.ok, []); + } + + /// See the [Rust documentation for `YMDET`](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.YMDET.html) for more information. + /// + /// Additional information: [1](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.YMDET.html#method.with_length), [2](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.YMDET.html#method.with_time_precision), [3](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.YMDET.html#method.with_alignment), [4](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.YMDET.html#method.with_year_style) + /// + /// Throws [DateTimeFormatterLoadError] on failure. + factory DateTimeFormatter.ymdetWithProvider(DataProvider provider, Locale locale, {DateTimeLength? length, TimePrecision? timePrecision, DateTimeAlignment? alignment, YearStyle? yearStyle}) { + final result = _icu4x_DateTimeFormatter_create_ymdet_with_provider_mv1(provider._ffi, locale._ffi, length != null ? _ResultInt32Void.ok(length.index) : _ResultInt32Void.err(), timePrecision != null ? _ResultInt32Void.ok(timePrecision.index) : _ResultInt32Void.err(), alignment != null ? _ResultInt32Void.ok(alignment.index) : _ResultInt32Void.err(), yearStyle != null ? _ResultInt32Void.ok(yearStyle.index) : _ResultInt32Void.err()); + if (!result.isOk) { + throw DateTimeFormatterLoadError.values.firstWhere((v) => v._ffi == result.union.err); + } + return DateTimeFormatter._fromFfi(result.union.ok, []); + } + + /// See the [Rust documentation for `ET`](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.ET.html) for more information. + /// + /// Additional information: [1](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.ET.html#method.with_length), [2](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.ET.html#method.with_time_precision), [3](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.ET.html#method.with_alignment) + /// + /// Throws [DateTimeFormatterLoadError] on failure. + factory DateTimeFormatter.et(Locale locale, {DateTimeLength? length, TimePrecision? timePrecision, DateTimeAlignment? alignment}) { + final result = _icu4x_DateTimeFormatter_create_et_mv1(locale._ffi, length != null ? _ResultInt32Void.ok(length.index) : _ResultInt32Void.err(), timePrecision != null ? _ResultInt32Void.ok(timePrecision.index) : _ResultInt32Void.err(), alignment != null ? _ResultInt32Void.ok(alignment.index) : _ResultInt32Void.err()); + if (!result.isOk) { + throw DateTimeFormatterLoadError.values.firstWhere((v) => v._ffi == result.union.err); + } + return DateTimeFormatter._fromFfi(result.union.ok, []); + } + + /// See the [Rust documentation for `ET`](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.ET.html) for more information. + /// + /// Additional information: [1](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.ET.html#method.with_length), [2](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.ET.html#method.with_time_precision), [3](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.ET.html#method.with_alignment) + /// + /// Throws [DateTimeFormatterLoadError] on failure. + factory DateTimeFormatter.etWithProvider(DataProvider provider, Locale locale, {DateTimeLength? length, TimePrecision? timePrecision, DateTimeAlignment? alignment}) { + final result = _icu4x_DateTimeFormatter_create_et_with_provider_mv1(provider._ffi, locale._ffi, length != null ? _ResultInt32Void.ok(length.index) : _ResultInt32Void.err(), timePrecision != null ? _ResultInt32Void.ok(timePrecision.index) : _ResultInt32Void.err(), alignment != null ? _ResultInt32Void.ok(alignment.index) : _ResultInt32Void.err()); if (!result.isOk) { - throw DateTimeFormatError.values.firstWhere((v) => v._ffi == result.union.err); + throw DateTimeFormatterLoadError.values.firstWhere((v) => v._ffi == result.union.err); } + return DateTimeFormatter._fromFfi(result.union.ok, []); + } + + /// See the [Rust documentation for `format`](https://docs.rs/icu/latest/icu/datetime/struct.DateTimeFormatter.html#method.format) for more information. + String formatIso(IsoDate date, Time time) { + final write = _Write(); + _icu4x_DateTimeFormatter_format_iso_mv1(_ffi, date._ffi, time._ffi, write._ffi); return write.finalize(); } - /// Returns the calendar system used in this formatter. + /// See the [Rust documentation for `format_same_calendar`](https://docs.rs/icu/latest/icu/datetime/struct.DateTimeFormatter.html#method.format_same_calendar) for more information. /// - /// See the [Rust documentation for `calendar`](https://docs.rs/icu/latest/icu/datetime/struct.DateTimeFormatter.html#method.calendar) for more information. - Calendar calendar() { - final result = _icu4x_DateTimeFormatter_calendar_mv1(_ffi); - return Calendar._fromFfi(result, []); + /// Throws [DateTimeMismatchedCalendarError] on failure. + String formatSameCalendar(Date date, Time time) { + final write = _Write(); + final result = _icu4x_DateTimeFormatter_format_same_calendar_mv1(_ffi, date._ffi, time._ffi, write._ffi); + if (!result.isOk) { + throw DateTimeMismatchedCalendarError._fromFfi(result.union.err); + } + return write.finalize(); } } @@ -98,26 +232,81 @@ final class DateTimeFormatter implements ffi.Finalizable { external void _icu4x_DateTimeFormatter_destroy_mv1(ffi.Pointer self); @meta.RecordUse() -@ffi.Native<_ResultOpaqueInt32 Function(ffi.Pointer, ffi.Int32)>(isLeaf: true, symbol: 'icu4x_DateTimeFormatter_create_with_length_mv1') +@ffi.Native<_ResultOpaqueInt32 Function(ffi.Pointer, _ResultInt32Void, _ResultInt32Void, _ResultInt32Void)>(isLeaf: true, symbol: 'icu4x_DateTimeFormatter_create_dt_mv1') +// ignore: non_constant_identifier_names +external _ResultOpaqueInt32 _icu4x_DateTimeFormatter_create_dt_mv1(ffi.Pointer locale, _ResultInt32Void length, _ResultInt32Void timePrecision, _ResultInt32Void alignment); + +@meta.RecordUse() +@ffi.Native<_ResultOpaqueInt32 Function(ffi.Pointer, ffi.Pointer, _ResultInt32Void, _ResultInt32Void, _ResultInt32Void)>(isLeaf: true, symbol: 'icu4x_DateTimeFormatter_create_dt_with_provider_mv1') +// ignore: non_constant_identifier_names +external _ResultOpaqueInt32 _icu4x_DateTimeFormatter_create_dt_with_provider_mv1(ffi.Pointer provider, ffi.Pointer locale, _ResultInt32Void length, _ResultInt32Void timePrecision, _ResultInt32Void alignment); + +@meta.RecordUse() +@ffi.Native<_ResultOpaqueInt32 Function(ffi.Pointer, _ResultInt32Void, _ResultInt32Void, _ResultInt32Void)>(isLeaf: true, symbol: 'icu4x_DateTimeFormatter_create_mdt_mv1') +// ignore: non_constant_identifier_names +external _ResultOpaqueInt32 _icu4x_DateTimeFormatter_create_mdt_mv1(ffi.Pointer locale, _ResultInt32Void length, _ResultInt32Void timePrecision, _ResultInt32Void alignment); + +@meta.RecordUse() +@ffi.Native<_ResultOpaqueInt32 Function(ffi.Pointer, ffi.Pointer, _ResultInt32Void, _ResultInt32Void, _ResultInt32Void)>(isLeaf: true, symbol: 'icu4x_DateTimeFormatter_create_mdt_with_provider_mv1') +// ignore: non_constant_identifier_names +external _ResultOpaqueInt32 _icu4x_DateTimeFormatter_create_mdt_with_provider_mv1(ffi.Pointer provider, ffi.Pointer locale, _ResultInt32Void length, _ResultInt32Void timePrecision, _ResultInt32Void alignment); + +@meta.RecordUse() +@ffi.Native<_ResultOpaqueInt32 Function(ffi.Pointer, _ResultInt32Void, _ResultInt32Void, _ResultInt32Void, _ResultInt32Void)>(isLeaf: true, symbol: 'icu4x_DateTimeFormatter_create_ymdt_mv1') +// ignore: non_constant_identifier_names +external _ResultOpaqueInt32 _icu4x_DateTimeFormatter_create_ymdt_mv1(ffi.Pointer locale, _ResultInt32Void length, _ResultInt32Void timePrecision, _ResultInt32Void alignment, _ResultInt32Void yearStyle); + +@meta.RecordUse() +@ffi.Native<_ResultOpaqueInt32 Function(ffi.Pointer, ffi.Pointer, _ResultInt32Void, _ResultInt32Void, _ResultInt32Void, _ResultInt32Void)>(isLeaf: true, symbol: 'icu4x_DateTimeFormatter_create_ymdt_with_provider_mv1') +// ignore: non_constant_identifier_names +external _ResultOpaqueInt32 _icu4x_DateTimeFormatter_create_ymdt_with_provider_mv1(ffi.Pointer provider, ffi.Pointer locale, _ResultInt32Void length, _ResultInt32Void timePrecision, _ResultInt32Void alignment, _ResultInt32Void yearStyle); + +@meta.RecordUse() +@ffi.Native<_ResultOpaqueInt32 Function(ffi.Pointer, _ResultInt32Void, _ResultInt32Void, _ResultInt32Void)>(isLeaf: true, symbol: 'icu4x_DateTimeFormatter_create_det_mv1') +// ignore: non_constant_identifier_names +external _ResultOpaqueInt32 _icu4x_DateTimeFormatter_create_det_mv1(ffi.Pointer locale, _ResultInt32Void length, _ResultInt32Void timePrecision, _ResultInt32Void alignment); + +@meta.RecordUse() +@ffi.Native<_ResultOpaqueInt32 Function(ffi.Pointer, ffi.Pointer, _ResultInt32Void, _ResultInt32Void, _ResultInt32Void)>(isLeaf: true, symbol: 'icu4x_DateTimeFormatter_create_det_with_provider_mv1') +// ignore: non_constant_identifier_names +external _ResultOpaqueInt32 _icu4x_DateTimeFormatter_create_det_with_provider_mv1(ffi.Pointer provider, ffi.Pointer locale, _ResultInt32Void length, _ResultInt32Void timePrecision, _ResultInt32Void alignment); + +@meta.RecordUse() +@ffi.Native<_ResultOpaqueInt32 Function(ffi.Pointer, _ResultInt32Void, _ResultInt32Void, _ResultInt32Void)>(isLeaf: true, symbol: 'icu4x_DateTimeFormatter_create_mdet_mv1') +// ignore: non_constant_identifier_names +external _ResultOpaqueInt32 _icu4x_DateTimeFormatter_create_mdet_mv1(ffi.Pointer locale, _ResultInt32Void length, _ResultInt32Void timePrecision, _ResultInt32Void alignment); + +@meta.RecordUse() +@ffi.Native<_ResultOpaqueInt32 Function(ffi.Pointer, ffi.Pointer, _ResultInt32Void, _ResultInt32Void, _ResultInt32Void)>(isLeaf: true, symbol: 'icu4x_DateTimeFormatter_create_mdet_with_provider_mv1') +// ignore: non_constant_identifier_names +external _ResultOpaqueInt32 _icu4x_DateTimeFormatter_create_mdet_with_provider_mv1(ffi.Pointer provider, ffi.Pointer locale, _ResultInt32Void length, _ResultInt32Void timePrecision, _ResultInt32Void alignment); + +@meta.RecordUse() +@ffi.Native<_ResultOpaqueInt32 Function(ffi.Pointer, _ResultInt32Void, _ResultInt32Void, _ResultInt32Void, _ResultInt32Void)>(isLeaf: true, symbol: 'icu4x_DateTimeFormatter_create_ymdet_mv1') +// ignore: non_constant_identifier_names +external _ResultOpaqueInt32 _icu4x_DateTimeFormatter_create_ymdet_mv1(ffi.Pointer locale, _ResultInt32Void length, _ResultInt32Void timePrecision, _ResultInt32Void alignment, _ResultInt32Void yearStyle); + +@meta.RecordUse() +@ffi.Native<_ResultOpaqueInt32 Function(ffi.Pointer, ffi.Pointer, _ResultInt32Void, _ResultInt32Void, _ResultInt32Void, _ResultInt32Void)>(isLeaf: true, symbol: 'icu4x_DateTimeFormatter_create_ymdet_with_provider_mv1') // ignore: non_constant_identifier_names -external _ResultOpaqueInt32 _icu4x_DateTimeFormatter_create_with_length_mv1(ffi.Pointer locale, int length); +external _ResultOpaqueInt32 _icu4x_DateTimeFormatter_create_ymdet_with_provider_mv1(ffi.Pointer provider, ffi.Pointer locale, _ResultInt32Void length, _ResultInt32Void timePrecision, _ResultInt32Void alignment, _ResultInt32Void yearStyle); @meta.RecordUse() -@ffi.Native<_ResultOpaqueInt32 Function(ffi.Pointer, ffi.Pointer, ffi.Int32)>(isLeaf: true, symbol: 'icu4x_DateTimeFormatter_create_with_length_and_provider_mv1') +@ffi.Native<_ResultOpaqueInt32 Function(ffi.Pointer, _ResultInt32Void, _ResultInt32Void, _ResultInt32Void)>(isLeaf: true, symbol: 'icu4x_DateTimeFormatter_create_et_mv1') // ignore: non_constant_identifier_names -external _ResultOpaqueInt32 _icu4x_DateTimeFormatter_create_with_length_and_provider_mv1(ffi.Pointer provider, ffi.Pointer locale, int length); +external _ResultOpaqueInt32 _icu4x_DateTimeFormatter_create_et_mv1(ffi.Pointer locale, _ResultInt32Void length, _ResultInt32Void timePrecision, _ResultInt32Void alignment); @meta.RecordUse() -@ffi.Native<_ResultVoidInt32 Function(ffi.Pointer, ffi.Pointer, ffi.Pointer, ffi.Pointer)>(isLeaf: true, symbol: 'icu4x_DateTimeFormatter_format_mv1') +@ffi.Native<_ResultOpaqueInt32 Function(ffi.Pointer, ffi.Pointer, _ResultInt32Void, _ResultInt32Void, _ResultInt32Void)>(isLeaf: true, symbol: 'icu4x_DateTimeFormatter_create_et_with_provider_mv1') // ignore: non_constant_identifier_names -external _ResultVoidInt32 _icu4x_DateTimeFormatter_format_mv1(ffi.Pointer self, ffi.Pointer date, ffi.Pointer time, ffi.Pointer write); +external _ResultOpaqueInt32 _icu4x_DateTimeFormatter_create_et_with_provider_mv1(ffi.Pointer provider, ffi.Pointer locale, _ResultInt32Void length, _ResultInt32Void timePrecision, _ResultInt32Void alignment); @meta.RecordUse() -@ffi.Native<_ResultVoidInt32 Function(ffi.Pointer, ffi.Pointer, ffi.Pointer, ffi.Pointer)>(isLeaf: true, symbol: 'icu4x_DateTimeFormatter_format_iso_mv1') +@ffi.Native, ffi.Pointer, ffi.Pointer, ffi.Pointer)>(isLeaf: true, symbol: 'icu4x_DateTimeFormatter_format_iso_mv1') // ignore: non_constant_identifier_names -external _ResultVoidInt32 _icu4x_DateTimeFormatter_format_iso_mv1(ffi.Pointer self, ffi.Pointer date, ffi.Pointer time, ffi.Pointer write); +external void _icu4x_DateTimeFormatter_format_iso_mv1(ffi.Pointer self, ffi.Pointer date, ffi.Pointer time, ffi.Pointer write); @meta.RecordUse() -@ffi.Native Function(ffi.Pointer)>(isLeaf: true, symbol: 'icu4x_DateTimeFormatter_calendar_mv1') +@ffi.Native<_ResultVoidDateTimeMismatchedCalendarErrorFfi Function(ffi.Pointer, ffi.Pointer, ffi.Pointer, ffi.Pointer)>(isLeaf: true, symbol: 'icu4x_DateTimeFormatter_format_same_calendar_mv1') // ignore: non_constant_identifier_names -external ffi.Pointer _icu4x_DateTimeFormatter_calendar_mv1(ffi.Pointer self); +external _ResultVoidDateTimeMismatchedCalendarErrorFfi _icu4x_DateTimeFormatter_format_same_calendar_mv1(ffi.Pointer self, ffi.Pointer date, ffi.Pointer time, ffi.Pointer write); diff --git a/ffi/capi/bindings/dart/DateTimeFormatterGregorian.g.dart b/ffi/capi/bindings/dart/DateTimeFormatterGregorian.g.dart new file mode 100644 index 00000000000..8f02257ad71 --- /dev/null +++ b/ffi/capi/bindings/dart/DateTimeFormatterGregorian.g.dart @@ -0,0 +1,295 @@ +// generated by diplomat-tool + +part of 'lib.g.dart'; + +/// See the [Rust documentation for `FixedCalendarDateTimeFormatter`](https://docs.rs/icu/latest/icu/datetime/type.FixedCalendarDateTimeFormatter.html) for more information. +final class DateTimeFormatterGregorian implements ffi.Finalizable { + final ffi.Pointer _ffi; + + // These are "used" in the sense that they keep dependencies alive + // ignore: unused_field + final core.List _selfEdge; + + // This takes in a list of lifetime edges (including for &self borrows) + // corresponding to data this may borrow from. These should be flat arrays containing + // references to objects, and this object will hold on to them to keep them alive and + // maintain borrow validity. + DateTimeFormatterGregorian._fromFfi(this._ffi, this._selfEdge) { + if (_selfEdge.isEmpty) { + _finalizer.attach(this, _ffi.cast()); + } + } + + static final _finalizer = ffi.NativeFinalizer(ffi.Native.addressOf(_icu4x_DateTimeFormatterGregorian_destroy_mv1)); + + /// See the [Rust documentation for `DT`](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.DT.html) for more information. + /// + /// Additional information: [1](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.DT.html#method.with_length), [2](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.DT.html#method.with_time_precision), [3](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.DT.html#method.with_alignment) + /// + /// Throws [DateTimeFormatterLoadError] on failure. + factory DateTimeFormatterGregorian.dt(Locale locale, {DateTimeLength? length, TimePrecision? timePrecision, DateTimeAlignment? alignment}) { + final result = _icu4x_DateTimeFormatterGregorian_create_dt_mv1(locale._ffi, length != null ? _ResultInt32Void.ok(length.index) : _ResultInt32Void.err(), timePrecision != null ? _ResultInt32Void.ok(timePrecision.index) : _ResultInt32Void.err(), alignment != null ? _ResultInt32Void.ok(alignment.index) : _ResultInt32Void.err()); + if (!result.isOk) { + throw DateTimeFormatterLoadError.values.firstWhere((v) => v._ffi == result.union.err); + } + return DateTimeFormatterGregorian._fromFfi(result.union.ok, []); + } + + /// See the [Rust documentation for `DT`](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.DT.html) for more information. + /// + /// See the [Rust documentation for `DT`](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.DT.html) for more information. + /// + /// Additional information: [1](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.DT.html#method.with_length), [2](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.DT.html#method.with_time_precision), [3](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.DT.html#method.with_alignment) + /// + /// Throws [DateTimeFormatterLoadError] on failure. + factory DateTimeFormatterGregorian.dtWithProvider(DataProvider provider, Locale locale, {DateTimeLength? length, TimePrecision? timePrecision, DateTimeAlignment? alignment}) { + final result = _icu4x_DateTimeFormatterGregorian_create_dt_with_provider_mv1(provider._ffi, locale._ffi, length != null ? _ResultInt32Void.ok(length.index) : _ResultInt32Void.err(), timePrecision != null ? _ResultInt32Void.ok(timePrecision.index) : _ResultInt32Void.err(), alignment != null ? _ResultInt32Void.ok(alignment.index) : _ResultInt32Void.err()); + if (!result.isOk) { + throw DateTimeFormatterLoadError.values.firstWhere((v) => v._ffi == result.union.err); + } + return DateTimeFormatterGregorian._fromFfi(result.union.ok, []); + } + + /// See the [Rust documentation for `MDT`](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.MDT.html) for more information. + /// + /// Additional information: [1](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.MDT.html#method.with_length), [2](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.MDT.html#method.with_time_precision), [3](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.MDT.html#method.with_alignment) + /// + /// Throws [DateTimeFormatterLoadError] on failure. + factory DateTimeFormatterGregorian.mdt(Locale locale, {DateTimeLength? length, TimePrecision? timePrecision, DateTimeAlignment? alignment}) { + final result = _icu4x_DateTimeFormatterGregorian_create_mdt_mv1(locale._ffi, length != null ? _ResultInt32Void.ok(length.index) : _ResultInt32Void.err(), timePrecision != null ? _ResultInt32Void.ok(timePrecision.index) : _ResultInt32Void.err(), alignment != null ? _ResultInt32Void.ok(alignment.index) : _ResultInt32Void.err()); + if (!result.isOk) { + throw DateTimeFormatterLoadError.values.firstWhere((v) => v._ffi == result.union.err); + } + return DateTimeFormatterGregorian._fromFfi(result.union.ok, []); + } + + /// See the [Rust documentation for `MDT`](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.MDT.html) for more information. + /// + /// Additional information: [1](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.MDT.html#method.with_length), [2](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.MDT.html#method.with_time_precision), [3](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.MDT.html#method.with_alignment) + /// + /// Throws [DateTimeFormatterLoadError] on failure. + factory DateTimeFormatterGregorian.mdtWithProvider(DataProvider provider, Locale locale, {DateTimeLength? length, TimePrecision? timePrecision, DateTimeAlignment? alignment}) { + final result = _icu4x_DateTimeFormatterGregorian_create_mdt_with_provider_mv1(provider._ffi, locale._ffi, length != null ? _ResultInt32Void.ok(length.index) : _ResultInt32Void.err(), timePrecision != null ? _ResultInt32Void.ok(timePrecision.index) : _ResultInt32Void.err(), alignment != null ? _ResultInt32Void.ok(alignment.index) : _ResultInt32Void.err()); + if (!result.isOk) { + throw DateTimeFormatterLoadError.values.firstWhere((v) => v._ffi == result.union.err); + } + return DateTimeFormatterGregorian._fromFfi(result.union.ok, []); + } + + /// See the [Rust documentation for `YMDT`](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.YMDT.html) for more information. + /// + /// Additional information: [1](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.YMDT.html#method.with_length), [2](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.YMDT.html#method.with_time_precision), [3](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.YMDT.html#method.with_alignment), [4](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.YMDT.html#method.with_year_style) + /// + /// Throws [DateTimeFormatterLoadError] on failure. + factory DateTimeFormatterGregorian.ymdt(Locale locale, {DateTimeLength? length, TimePrecision? timePrecision, DateTimeAlignment? alignment, YearStyle? yearStyle}) { + final result = _icu4x_DateTimeFormatterGregorian_create_ymdt_mv1(locale._ffi, length != null ? _ResultInt32Void.ok(length.index) : _ResultInt32Void.err(), timePrecision != null ? _ResultInt32Void.ok(timePrecision.index) : _ResultInt32Void.err(), alignment != null ? _ResultInt32Void.ok(alignment.index) : _ResultInt32Void.err(), yearStyle != null ? _ResultInt32Void.ok(yearStyle.index) : _ResultInt32Void.err()); + if (!result.isOk) { + throw DateTimeFormatterLoadError.values.firstWhere((v) => v._ffi == result.union.err); + } + return DateTimeFormatterGregorian._fromFfi(result.union.ok, []); + } + + /// See the [Rust documentation for `YMDT`](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.YMDT.html) for more information. + /// + /// Additional information: [1](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.YMDT.html#method.with_length), [2](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.YMDT.html#method.with_time_precision), [3](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.YMDT.html#method.with_alignment), [4](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.YMDT.html#method.with_year_style) + /// + /// Throws [DateTimeFormatterLoadError] on failure. + factory DateTimeFormatterGregorian.ymdtWithProvider(DataProvider provider, Locale locale, {DateTimeLength? length, TimePrecision? timePrecision, DateTimeAlignment? alignment, YearStyle? yearStyle}) { + final result = _icu4x_DateTimeFormatterGregorian_create_ymdt_with_provider_mv1(provider._ffi, locale._ffi, length != null ? _ResultInt32Void.ok(length.index) : _ResultInt32Void.err(), timePrecision != null ? _ResultInt32Void.ok(timePrecision.index) : _ResultInt32Void.err(), alignment != null ? _ResultInt32Void.ok(alignment.index) : _ResultInt32Void.err(), yearStyle != null ? _ResultInt32Void.ok(yearStyle.index) : _ResultInt32Void.err()); + if (!result.isOk) { + throw DateTimeFormatterLoadError.values.firstWhere((v) => v._ffi == result.union.err); + } + return DateTimeFormatterGregorian._fromFfi(result.union.ok, []); + } + + /// See the [Rust documentation for `DET`](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.DET.html) for more information. + /// + /// Additional information: [1](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.DET.html#method.with_length), [2](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.DET.html#method.with_time_precision), [3](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.DET.html#method.with_alignment) + /// + /// Throws [DateTimeFormatterLoadError] on failure. + factory DateTimeFormatterGregorian.det(Locale locale, {DateTimeLength? length, TimePrecision? timePrecision, DateTimeAlignment? alignment}) { + final result = _icu4x_DateTimeFormatterGregorian_create_det_mv1(locale._ffi, length != null ? _ResultInt32Void.ok(length.index) : _ResultInt32Void.err(), timePrecision != null ? _ResultInt32Void.ok(timePrecision.index) : _ResultInt32Void.err(), alignment != null ? _ResultInt32Void.ok(alignment.index) : _ResultInt32Void.err()); + if (!result.isOk) { + throw DateTimeFormatterLoadError.values.firstWhere((v) => v._ffi == result.union.err); + } + return DateTimeFormatterGregorian._fromFfi(result.union.ok, []); + } + + /// See the [Rust documentation for `DET`](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.DET.html) for more information. + /// + /// Additional information: [1](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.DET.html#method.with_length), [2](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.DET.html#method.with_time_precision), [3](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.DET.html#method.with_alignment) + /// + /// Throws [DateTimeFormatterLoadError] on failure. + factory DateTimeFormatterGregorian.detWithProvider(DataProvider provider, Locale locale, {DateTimeLength? length, TimePrecision? timePrecision, DateTimeAlignment? alignment}) { + final result = _icu4x_DateTimeFormatterGregorian_create_det_with_provider_mv1(provider._ffi, locale._ffi, length != null ? _ResultInt32Void.ok(length.index) : _ResultInt32Void.err(), timePrecision != null ? _ResultInt32Void.ok(timePrecision.index) : _ResultInt32Void.err(), alignment != null ? _ResultInt32Void.ok(alignment.index) : _ResultInt32Void.err()); + if (!result.isOk) { + throw DateTimeFormatterLoadError.values.firstWhere((v) => v._ffi == result.union.err); + } + return DateTimeFormatterGregorian._fromFfi(result.union.ok, []); + } + + /// See the [Rust documentation for `MDET`](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.MDET.html) for more information. + /// + /// Additional information: [1](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.MDET.html#method.with_length), [2](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.MDET.html#method.with_time_precision), [3](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.MDET.html#method.with_alignment) + /// + /// Throws [DateTimeFormatterLoadError] on failure. + factory DateTimeFormatterGregorian.mdet(Locale locale, {DateTimeLength? length, TimePrecision? timePrecision, DateTimeAlignment? alignment}) { + final result = _icu4x_DateTimeFormatterGregorian_create_mdet_mv1(locale._ffi, length != null ? _ResultInt32Void.ok(length.index) : _ResultInt32Void.err(), timePrecision != null ? _ResultInt32Void.ok(timePrecision.index) : _ResultInt32Void.err(), alignment != null ? _ResultInt32Void.ok(alignment.index) : _ResultInt32Void.err()); + if (!result.isOk) { + throw DateTimeFormatterLoadError.values.firstWhere((v) => v._ffi == result.union.err); + } + return DateTimeFormatterGregorian._fromFfi(result.union.ok, []); + } + + /// See the [Rust documentation for `MDET`](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.MDET.html) for more information. + /// + /// Additional information: [1](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.MDET.html#method.with_length), [2](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.MDET.html#method.with_time_precision), [3](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.MDET.html#method.with_alignment) + /// + /// Throws [DateTimeFormatterLoadError] on failure. + factory DateTimeFormatterGregorian.mdetWithProvider(DataProvider provider, Locale locale, {DateTimeLength? length, TimePrecision? timePrecision, DateTimeAlignment? alignment}) { + final result = _icu4x_DateTimeFormatterGregorian_create_mdet_with_provider_mv1(provider._ffi, locale._ffi, length != null ? _ResultInt32Void.ok(length.index) : _ResultInt32Void.err(), timePrecision != null ? _ResultInt32Void.ok(timePrecision.index) : _ResultInt32Void.err(), alignment != null ? _ResultInt32Void.ok(alignment.index) : _ResultInt32Void.err()); + if (!result.isOk) { + throw DateTimeFormatterLoadError.values.firstWhere((v) => v._ffi == result.union.err); + } + return DateTimeFormatterGregorian._fromFfi(result.union.ok, []); + } + + /// See the [Rust documentation for `YMDET`](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.YMDET.html) for more information. + /// + /// Additional information: [1](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.YMDET.html#method.with_length), [2](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.YMDET.html#method.with_time_precision), [3](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.YMDET.html#method.with_alignment), [4](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.YMDET.html#method.with_year_style) + /// + /// Throws [DateTimeFormatterLoadError] on failure. + factory DateTimeFormatterGregorian.ymdet(Locale locale, {DateTimeLength? length, TimePrecision? timePrecision, DateTimeAlignment? alignment, YearStyle? yearStyle}) { + final result = _icu4x_DateTimeFormatterGregorian_create_ymdet_mv1(locale._ffi, length != null ? _ResultInt32Void.ok(length.index) : _ResultInt32Void.err(), timePrecision != null ? _ResultInt32Void.ok(timePrecision.index) : _ResultInt32Void.err(), alignment != null ? _ResultInt32Void.ok(alignment.index) : _ResultInt32Void.err(), yearStyle != null ? _ResultInt32Void.ok(yearStyle.index) : _ResultInt32Void.err()); + if (!result.isOk) { + throw DateTimeFormatterLoadError.values.firstWhere((v) => v._ffi == result.union.err); + } + return DateTimeFormatterGregorian._fromFfi(result.union.ok, []); + } + + /// See the [Rust documentation for `YMDET`](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.YMDET.html) for more information. + /// + /// Additional information: [1](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.YMDET.html#method.with_length), [2](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.YMDET.html#method.with_time_precision), [3](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.YMDET.html#method.with_alignment), [4](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.YMDET.html#method.with_year_style) + /// + /// Throws [DateTimeFormatterLoadError] on failure. + factory DateTimeFormatterGregorian.ymdetWithProvider(DataProvider provider, Locale locale, {DateTimeLength? length, TimePrecision? timePrecision, DateTimeAlignment? alignment, YearStyle? yearStyle}) { + final result = _icu4x_DateTimeFormatterGregorian_create_ymdet_with_provider_mv1(provider._ffi, locale._ffi, length != null ? _ResultInt32Void.ok(length.index) : _ResultInt32Void.err(), timePrecision != null ? _ResultInt32Void.ok(timePrecision.index) : _ResultInt32Void.err(), alignment != null ? _ResultInt32Void.ok(alignment.index) : _ResultInt32Void.err(), yearStyle != null ? _ResultInt32Void.ok(yearStyle.index) : _ResultInt32Void.err()); + if (!result.isOk) { + throw DateTimeFormatterLoadError.values.firstWhere((v) => v._ffi == result.union.err); + } + return DateTimeFormatterGregorian._fromFfi(result.union.ok, []); + } + + /// See the [Rust documentation for `ET`](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.ET.html) for more information. + /// + /// Additional information: [1](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.ET.html#method.with_length), [2](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.ET.html#method.with_time_precision), [3](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.ET.html#method.with_alignment) + /// + /// Throws [DateTimeFormatterLoadError] on failure. + factory DateTimeFormatterGregorian.et(Locale locale, {DateTimeLength? length, TimePrecision? timePrecision, DateTimeAlignment? alignment}) { + final result = _icu4x_DateTimeFormatterGregorian_create_et_mv1(locale._ffi, length != null ? _ResultInt32Void.ok(length.index) : _ResultInt32Void.err(), timePrecision != null ? _ResultInt32Void.ok(timePrecision.index) : _ResultInt32Void.err(), alignment != null ? _ResultInt32Void.ok(alignment.index) : _ResultInt32Void.err()); + if (!result.isOk) { + throw DateTimeFormatterLoadError.values.firstWhere((v) => v._ffi == result.union.err); + } + return DateTimeFormatterGregorian._fromFfi(result.union.ok, []); + } + + /// See the [Rust documentation for `ET`](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.ET.html) for more information. + /// + /// Additional information: [1](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.ET.html#method.with_length), [2](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.ET.html#method.with_time_precision), [3](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.ET.html#method.with_alignment) + /// + /// Throws [DateTimeFormatterLoadError] on failure. + factory DateTimeFormatterGregorian.etWithProvider(DataProvider provider, Locale locale, {DateTimeLength? length, TimePrecision? timePrecision, DateTimeAlignment? alignment}) { + final result = _icu4x_DateTimeFormatterGregorian_create_et_with_provider_mv1(provider._ffi, locale._ffi, length != null ? _ResultInt32Void.ok(length.index) : _ResultInt32Void.err(), timePrecision != null ? _ResultInt32Void.ok(timePrecision.index) : _ResultInt32Void.err(), alignment != null ? _ResultInt32Void.ok(alignment.index) : _ResultInt32Void.err()); + if (!result.isOk) { + throw DateTimeFormatterLoadError.values.firstWhere((v) => v._ffi == result.union.err); + } + return DateTimeFormatterGregorian._fromFfi(result.union.ok, []); + } + + /// See the [Rust documentation for `format`](https://docs.rs/icu/latest/icu/datetime/struct.FixedCalendarDateTimeFormatter.html#method.format) for more information. + String formatIso(IsoDate date, Time time) { + final write = _Write(); + _icu4x_DateTimeFormatterGregorian_format_iso_mv1(_ffi, date._ffi, time._ffi, write._ffi); + return write.finalize(); + } +} + +@meta.RecordUse() +@ffi.Native)>(isLeaf: true, symbol: 'icu4x_DateTimeFormatterGregorian_destroy_mv1') +// ignore: non_constant_identifier_names +external void _icu4x_DateTimeFormatterGregorian_destroy_mv1(ffi.Pointer self); + +@meta.RecordUse() +@ffi.Native<_ResultOpaqueInt32 Function(ffi.Pointer, _ResultInt32Void, _ResultInt32Void, _ResultInt32Void)>(isLeaf: true, symbol: 'icu4x_DateTimeFormatterGregorian_create_dt_mv1') +// ignore: non_constant_identifier_names +external _ResultOpaqueInt32 _icu4x_DateTimeFormatterGregorian_create_dt_mv1(ffi.Pointer locale, _ResultInt32Void length, _ResultInt32Void timePrecision, _ResultInt32Void alignment); + +@meta.RecordUse() +@ffi.Native<_ResultOpaqueInt32 Function(ffi.Pointer, ffi.Pointer, _ResultInt32Void, _ResultInt32Void, _ResultInt32Void)>(isLeaf: true, symbol: 'icu4x_DateTimeFormatterGregorian_create_dt_with_provider_mv1') +// ignore: non_constant_identifier_names +external _ResultOpaqueInt32 _icu4x_DateTimeFormatterGregorian_create_dt_with_provider_mv1(ffi.Pointer provider, ffi.Pointer locale, _ResultInt32Void length, _ResultInt32Void timePrecision, _ResultInt32Void alignment); + +@meta.RecordUse() +@ffi.Native<_ResultOpaqueInt32 Function(ffi.Pointer, _ResultInt32Void, _ResultInt32Void, _ResultInt32Void)>(isLeaf: true, symbol: 'icu4x_DateTimeFormatterGregorian_create_mdt_mv1') +// ignore: non_constant_identifier_names +external _ResultOpaqueInt32 _icu4x_DateTimeFormatterGregorian_create_mdt_mv1(ffi.Pointer locale, _ResultInt32Void length, _ResultInt32Void timePrecision, _ResultInt32Void alignment); + +@meta.RecordUse() +@ffi.Native<_ResultOpaqueInt32 Function(ffi.Pointer, ffi.Pointer, _ResultInt32Void, _ResultInt32Void, _ResultInt32Void)>(isLeaf: true, symbol: 'icu4x_DateTimeFormatterGregorian_create_mdt_with_provider_mv1') +// ignore: non_constant_identifier_names +external _ResultOpaqueInt32 _icu4x_DateTimeFormatterGregorian_create_mdt_with_provider_mv1(ffi.Pointer provider, ffi.Pointer locale, _ResultInt32Void length, _ResultInt32Void timePrecision, _ResultInt32Void alignment); + +@meta.RecordUse() +@ffi.Native<_ResultOpaqueInt32 Function(ffi.Pointer, _ResultInt32Void, _ResultInt32Void, _ResultInt32Void, _ResultInt32Void)>(isLeaf: true, symbol: 'icu4x_DateTimeFormatterGregorian_create_ymdt_mv1') +// ignore: non_constant_identifier_names +external _ResultOpaqueInt32 _icu4x_DateTimeFormatterGregorian_create_ymdt_mv1(ffi.Pointer locale, _ResultInt32Void length, _ResultInt32Void timePrecision, _ResultInt32Void alignment, _ResultInt32Void yearStyle); + +@meta.RecordUse() +@ffi.Native<_ResultOpaqueInt32 Function(ffi.Pointer, ffi.Pointer, _ResultInt32Void, _ResultInt32Void, _ResultInt32Void, _ResultInt32Void)>(isLeaf: true, symbol: 'icu4x_DateTimeFormatterGregorian_create_ymdt_with_provider_mv1') +// ignore: non_constant_identifier_names +external _ResultOpaqueInt32 _icu4x_DateTimeFormatterGregorian_create_ymdt_with_provider_mv1(ffi.Pointer provider, ffi.Pointer locale, _ResultInt32Void length, _ResultInt32Void timePrecision, _ResultInt32Void alignment, _ResultInt32Void yearStyle); + +@meta.RecordUse() +@ffi.Native<_ResultOpaqueInt32 Function(ffi.Pointer, _ResultInt32Void, _ResultInt32Void, _ResultInt32Void)>(isLeaf: true, symbol: 'icu4x_DateTimeFormatterGregorian_create_det_mv1') +// ignore: non_constant_identifier_names +external _ResultOpaqueInt32 _icu4x_DateTimeFormatterGregorian_create_det_mv1(ffi.Pointer locale, _ResultInt32Void length, _ResultInt32Void timePrecision, _ResultInt32Void alignment); + +@meta.RecordUse() +@ffi.Native<_ResultOpaqueInt32 Function(ffi.Pointer, ffi.Pointer, _ResultInt32Void, _ResultInt32Void, _ResultInt32Void)>(isLeaf: true, symbol: 'icu4x_DateTimeFormatterGregorian_create_det_with_provider_mv1') +// ignore: non_constant_identifier_names +external _ResultOpaqueInt32 _icu4x_DateTimeFormatterGregorian_create_det_with_provider_mv1(ffi.Pointer provider, ffi.Pointer locale, _ResultInt32Void length, _ResultInt32Void timePrecision, _ResultInt32Void alignment); + +@meta.RecordUse() +@ffi.Native<_ResultOpaqueInt32 Function(ffi.Pointer, _ResultInt32Void, _ResultInt32Void, _ResultInt32Void)>(isLeaf: true, symbol: 'icu4x_DateTimeFormatterGregorian_create_mdet_mv1') +// ignore: non_constant_identifier_names +external _ResultOpaqueInt32 _icu4x_DateTimeFormatterGregorian_create_mdet_mv1(ffi.Pointer locale, _ResultInt32Void length, _ResultInt32Void timePrecision, _ResultInt32Void alignment); + +@meta.RecordUse() +@ffi.Native<_ResultOpaqueInt32 Function(ffi.Pointer, ffi.Pointer, _ResultInt32Void, _ResultInt32Void, _ResultInt32Void)>(isLeaf: true, symbol: 'icu4x_DateTimeFormatterGregorian_create_mdet_with_provider_mv1') +// ignore: non_constant_identifier_names +external _ResultOpaqueInt32 _icu4x_DateTimeFormatterGregorian_create_mdet_with_provider_mv1(ffi.Pointer provider, ffi.Pointer locale, _ResultInt32Void length, _ResultInt32Void timePrecision, _ResultInt32Void alignment); + +@meta.RecordUse() +@ffi.Native<_ResultOpaqueInt32 Function(ffi.Pointer, _ResultInt32Void, _ResultInt32Void, _ResultInt32Void, _ResultInt32Void)>(isLeaf: true, symbol: 'icu4x_DateTimeFormatterGregorian_create_ymdet_mv1') +// ignore: non_constant_identifier_names +external _ResultOpaqueInt32 _icu4x_DateTimeFormatterGregorian_create_ymdet_mv1(ffi.Pointer locale, _ResultInt32Void length, _ResultInt32Void timePrecision, _ResultInt32Void alignment, _ResultInt32Void yearStyle); + +@meta.RecordUse() +@ffi.Native<_ResultOpaqueInt32 Function(ffi.Pointer, ffi.Pointer, _ResultInt32Void, _ResultInt32Void, _ResultInt32Void, _ResultInt32Void)>(isLeaf: true, symbol: 'icu4x_DateTimeFormatterGregorian_create_ymdet_with_provider_mv1') +// ignore: non_constant_identifier_names +external _ResultOpaqueInt32 _icu4x_DateTimeFormatterGregorian_create_ymdet_with_provider_mv1(ffi.Pointer provider, ffi.Pointer locale, _ResultInt32Void length, _ResultInt32Void timePrecision, _ResultInt32Void alignment, _ResultInt32Void yearStyle); + +@meta.RecordUse() +@ffi.Native<_ResultOpaqueInt32 Function(ffi.Pointer, _ResultInt32Void, _ResultInt32Void, _ResultInt32Void)>(isLeaf: true, symbol: 'icu4x_DateTimeFormatterGregorian_create_et_mv1') +// ignore: non_constant_identifier_names +external _ResultOpaqueInt32 _icu4x_DateTimeFormatterGregorian_create_et_mv1(ffi.Pointer locale, _ResultInt32Void length, _ResultInt32Void timePrecision, _ResultInt32Void alignment); + +@meta.RecordUse() +@ffi.Native<_ResultOpaqueInt32 Function(ffi.Pointer, ffi.Pointer, _ResultInt32Void, _ResultInt32Void, _ResultInt32Void)>(isLeaf: true, symbol: 'icu4x_DateTimeFormatterGregorian_create_et_with_provider_mv1') +// ignore: non_constant_identifier_names +external _ResultOpaqueInt32 _icu4x_DateTimeFormatterGregorian_create_et_with_provider_mv1(ffi.Pointer provider, ffi.Pointer locale, _ResultInt32Void length, _ResultInt32Void timePrecision, _ResultInt32Void alignment); + +@meta.RecordUse() +@ffi.Native, ffi.Pointer, ffi.Pointer, ffi.Pointer)>(isLeaf: true, symbol: 'icu4x_DateTimeFormatterGregorian_format_iso_mv1') +// ignore: non_constant_identifier_names +external void _icu4x_DateTimeFormatterGregorian_format_iso_mv1(ffi.Pointer self, ffi.Pointer date, ffi.Pointer time, ffi.Pointer write); diff --git a/ffi/capi/bindings/dart/DateTimeMismatchedCalendarError.g.dart b/ffi/capi/bindings/dart/DateTimeMismatchedCalendarError.g.dart new file mode 100644 index 00000000000..43101d0fab1 --- /dev/null +++ b/ffi/capi/bindings/dart/DateTimeMismatchedCalendarError.g.dart @@ -0,0 +1,48 @@ +// generated by diplomat-tool + +part of 'lib.g.dart'; + +final class _DateTimeMismatchedCalendarErrorFfi extends ffi.Struct { + @ffi.Int32() + external int thisKind; + external _ResultInt32Void dateKind; +} + +/// See the [Rust documentation for `MismatchedCalendarError`](https://docs.rs/icu/latest/icu/datetime/struct.MismatchedCalendarError.html) for more information. +final class DateTimeMismatchedCalendarError { + AnyCalendarKind thisKind; + AnyCalendarKind? dateKind; + + DateTimeMismatchedCalendarError({required this.thisKind, this.dateKind}); + + // This struct contains borrowed fields, so this takes in a list of + // "edges" corresponding to where each lifetime's data may have been borrowed from + // and passes it down to individual fields containing the borrow. + // This method does not attempt to handle any dependencies between lifetimes, the caller + // should handle this when constructing edge arrays. + // ignore: unused_element + DateTimeMismatchedCalendarError._fromFfi(_DateTimeMismatchedCalendarErrorFfi ffi) : + thisKind = AnyCalendarKind.values[ffi.thisKind], + dateKind = ffi.dateKind.isOk ? AnyCalendarKind.values[ffi.dateKind.union.ok] : null; + + // ignore: unused_element + _DateTimeMismatchedCalendarErrorFfi _toFfi(ffi.Allocator temp) { + final struct = ffi.Struct.create<_DateTimeMismatchedCalendarErrorFfi>(); + struct.thisKind = thisKind.index; + AnyCalendarKind? dateKind = this.dateKind; + struct.dateKind = dateKind != null ? _ResultInt32Void.ok(dateKind.index) : _ResultInt32Void.err(); + return struct; + } + + @override + bool operator ==(Object other) => + other is DateTimeMismatchedCalendarError && + other.thisKind == thisKind && + other.dateKind == dateKind; + + @override + int get hashCode => Object.hashAll([ + thisKind, + dateKind, + ]); +} diff --git a/ffi/capi/bindings/dart/GregorianDateTimeFormatter.g.dart b/ffi/capi/bindings/dart/GregorianDateTimeFormatter.g.dart deleted file mode 100644 index 21ef46b51ee..00000000000 --- a/ffi/capi/bindings/dart/GregorianDateTimeFormatter.g.dart +++ /dev/null @@ -1,84 +0,0 @@ -// generated by diplomat-tool - -part of 'lib.g.dart'; - -/// An ICU4X FixedCalendarDateTimeFormatter object capable of formatting an [`IsoDate`] and a [`Time`] as a string, -/// using the Gregorian Calendar. -/// -/// See the [Rust documentation for `FixedCalendarDateTimeFormatter`](https://docs.rs/icu/latest/icu/datetime/struct.FixedCalendarDateTimeFormatter.html) for more information. -/// -/// Additional information: [1](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.YMDT.html) -final class GregorianDateTimeFormatter implements ffi.Finalizable { - final ffi.Pointer _ffi; - - // These are "used" in the sense that they keep dependencies alive - // ignore: unused_field - final core.List _selfEdge; - - // This takes in a list of lifetime edges (including for &self borrows) - // corresponding to data this may borrow from. These should be flat arrays containing - // references to objects, and this object will hold on to them to keep them alive and - // maintain borrow validity. - GregorianDateTimeFormatter._fromFfi(this._ffi, this._selfEdge) { - if (_selfEdge.isEmpty) { - _finalizer.attach(this, _ffi.cast()); - } - } - - static final _finalizer = ffi.NativeFinalizer(ffi.Native.addressOf(_icu4x_GregorianDateTimeFormatter_destroy_mv1)); - - /// Creates a new [`GregorianDateTimeFormatter`] using compiled data. - /// - /// See the [Rust documentation for `try_new`](https://docs.rs/icu/latest/icu/datetime/struct.FixedCalendarDateTimeFormatter.html#method.try_new) for more information. - /// - /// Throws [DateTimeFormatterLoadError] on failure. - factory GregorianDateTimeFormatter.withLength(Locale locale, DateTimeLength length) { - final result = _icu4x_GregorianDateTimeFormatter_create_with_length_mv1(locale._ffi, length.index); - if (!result.isOk) { - throw DateTimeFormatterLoadError.values.firstWhere((v) => v._ffi == result.union.err); - } - return GregorianDateTimeFormatter._fromFfi(result.union.ok, []); - } - - /// Creates a new [`GregorianDateTimeFormatter`] using a particular data source. - /// - /// See the [Rust documentation for `try_new`](https://docs.rs/icu/latest/icu/datetime/struct.FixedCalendarDateTimeFormatter.html#method.try_new) for more information. - /// - /// Throws [DateTimeFormatterLoadError] on failure. - factory GregorianDateTimeFormatter.withLengthAndProvider(DataProvider provider, Locale locale, DateTimeLength length) { - final result = _icu4x_GregorianDateTimeFormatter_create_with_length_and_provider_mv1(provider._ffi, locale._ffi, length.index); - if (!result.isOk) { - throw DateTimeFormatterLoadError.values.firstWhere((v) => v._ffi == result.union.err); - } - return GregorianDateTimeFormatter._fromFfi(result.union.ok, []); - } - - /// Formats an [`IsoDate`] and a [`Time`] to a string. - /// - /// See the [Rust documentation for `format`](https://docs.rs/icu/latest/icu/datetime/struct.FixedCalendarDateTimeFormatter.html#method.format) for more information. - String formatIso(IsoDate date, Time time) { - final write = _Write(); - _icu4x_GregorianDateTimeFormatter_format_iso_mv1(_ffi, date._ffi, time._ffi, write._ffi); - return write.finalize(); - } -} - -@meta.RecordUse() -@ffi.Native)>(isLeaf: true, symbol: 'icu4x_GregorianDateTimeFormatter_destroy_mv1') -// ignore: non_constant_identifier_names -external void _icu4x_GregorianDateTimeFormatter_destroy_mv1(ffi.Pointer self); - -@meta.RecordUse() -@ffi.Native<_ResultOpaqueInt32 Function(ffi.Pointer, ffi.Int32)>(isLeaf: true, symbol: 'icu4x_GregorianDateTimeFormatter_create_with_length_mv1') -// ignore: non_constant_identifier_names -external _ResultOpaqueInt32 _icu4x_GregorianDateTimeFormatter_create_with_length_mv1(ffi.Pointer locale, int length); - -@meta.RecordUse() -@ffi.Native<_ResultOpaqueInt32 Function(ffi.Pointer, ffi.Pointer, ffi.Int32)>(isLeaf: true, symbol: 'icu4x_GregorianDateTimeFormatter_create_with_length_and_provider_mv1') -// ignore: non_constant_identifier_names -external _ResultOpaqueInt32 _icu4x_GregorianDateTimeFormatter_create_with_length_and_provider_mv1(ffi.Pointer provider, ffi.Pointer locale, int length); - -@meta.RecordUse() -@ffi.Native, ffi.Pointer, ffi.Pointer, ffi.Pointer)>(isLeaf: true, symbol: 'icu4x_GregorianDateTimeFormatter_format_iso_mv1') -// ignore: non_constant_identifier_names -external void _icu4x_GregorianDateTimeFormatter_format_iso_mv1(ffi.Pointer self, ffi.Pointer date, ffi.Pointer time, ffi.Pointer write); diff --git a/ffi/capi/bindings/dart/TimePrecision.g.dart b/ffi/capi/bindings/dart/TimePrecision.g.dart new file mode 100644 index 00000000000..ebd90443abc --- /dev/null +++ b/ffi/capi/bindings/dart/TimePrecision.g.dart @@ -0,0 +1,32 @@ +// generated by diplomat-tool + +part of 'lib.g.dart'; + +/// See the [Rust documentation for `TimePrecision`](https://docs.rs/icu/latest/icu/datetime/enum.TimePrecision.html) for more information. +enum TimePrecision { + hour, + + minute, + + minuteOptional, + + second, + + secondF1, + + secondF2, + + secondF3, + + secondF4, + + secondF5, + + secondF6, + + secondF7, + + secondF8, + + secondF9; +} diff --git a/ffi/capi/bindings/dart/YearStyle.g.dart b/ffi/capi/bindings/dart/YearStyle.g.dart new file mode 100644 index 00000000000..9a0eb418c83 --- /dev/null +++ b/ffi/capi/bindings/dart/YearStyle.g.dart @@ -0,0 +1,12 @@ +// generated by diplomat-tool + +part of 'lib.g.dart'; + +/// See the [Rust documentation for `YearStyle`](https://docs.rs/icu/latest/icu/datetime/enum.YearStyle.html) for more information. +enum YearStyle { + auto, + + full, + + withEra; +} diff --git a/ffi/capi/bindings/dart/lib.g.dart b/ffi/capi/bindings/dart/lib.g.dart index 85c84dfb2d1..c7874721fe1 100644 --- a/ffi/capi/bindings/dart/lib.g.dart +++ b/ffi/capi/bindings/dart/lib.g.dart @@ -47,10 +47,13 @@ part 'DataProvider.g.dart'; part 'Date.g.dart'; part 'DateFormatter.g.dart'; part 'DateTime.g.dart'; +part 'DateTimeAlignment.g.dart'; part 'DateTimeFormatError.g.dart'; part 'DateTimeFormatter.g.dart'; +part 'DateTimeFormatterGregorian.g.dart'; part 'DateTimeFormatterLoadError.g.dart'; part 'DateTimeLength.g.dart'; +part 'DateTimeMismatchedCalendarError.g.dart'; part 'DecimalFormatter.g.dart'; part 'DecimalGroupingStrategy.g.dart'; part 'Decomposed.g.dart'; @@ -76,7 +79,6 @@ part 'GraphemeClusterBreakIteratorUtf16.g.dart'; part 'GraphemeClusterBreakIteratorUtf8.g.dart'; part 'GraphemeClusterSegmenter.g.dart'; part 'GregorianDateFormatter.g.dart'; -part 'GregorianDateTimeFormatter.g.dart'; part 'GregorianZonedDateTimeFormatter.g.dart'; part 'HangulSyllableType.g.dart'; part 'IndicSyllabicCategory.g.dart'; @@ -131,6 +133,7 @@ part 'SentenceSegmenter.g.dart'; part 'SignedFixedDecimal.g.dart'; part 'Time.g.dart'; part 'TimeFormatter.g.dart'; +part 'TimePrecision.g.dart'; part 'TimeZoneIdMapper.g.dart'; part 'TimeZoneIdMapperWithFastCanonicalization.g.dart'; part 'TimeZoneInfo.g.dart'; @@ -150,6 +153,7 @@ part 'WordBreakIteratorLatin1.g.dart'; part 'WordBreakIteratorUtf16.g.dart'; part 'WordBreakIteratorUtf8.g.dart'; part 'WordSegmenter.g.dart'; +part 'YearStyle.g.dart'; part 'ZonedDateTime.g.dart'; part 'ZonedDateTimeFormatter.g.dart'; part 'ZonedDateTimeParser.g.dart'; @@ -510,6 +514,31 @@ final class _ResultUint8Void extends ffi.Struct { } } +final class _ResultVoidDateTimeMismatchedCalendarErrorFfiUnion extends ffi.Union { + + external _DateTimeMismatchedCalendarErrorFfi err; +} + +final class _ResultVoidDateTimeMismatchedCalendarErrorFfi extends ffi.Struct { + external _ResultVoidDateTimeMismatchedCalendarErrorFfiUnion union; + + @ffi.Bool() + external bool isOk; + + + factory _ResultVoidDateTimeMismatchedCalendarErrorFfi.ok() { + final struct = ffi.Struct.create<_ResultVoidDateTimeMismatchedCalendarErrorFfi>(); + struct.isOk = true; + return struct; + } + factory _ResultVoidDateTimeMismatchedCalendarErrorFfi.err(_DateTimeMismatchedCalendarErrorFfi val) { + final struct = ffi.Struct.create<_ResultVoidDateTimeMismatchedCalendarErrorFfi>(); + struct.isOk = false; + struct.union.err = val; + return struct; + } +} + final class _ResultVoidInt32Union extends ffi.Union { @ffi.Int32() diff --git a/ffi/capi/bindings/demo_gen/DateTimeFormatter.d.ts b/ffi/capi/bindings/demo_gen/DateTimeFormatter.d.ts index 2dea2cb457d..5c41bec495b 100644 --- a/ffi/capi/bindings/demo_gen/DateTimeFormatter.d.ts +++ b/ffi/capi/bindings/demo_gen/DateTimeFormatter.d.ts @@ -4,5 +4,5 @@ import { DateTimeFormatter } from "icu4x" import { IsoDate } from "icu4x" import { Locale } from "icu4x" import { Time } from "icu4x" -export function format(dateTimeFormatterLocaleName: string, dateTimeFormatterLength: DateTimeLength, dateYear: number, dateMonth: number, dateDay: number, dateCalendarLocaleName: string, timeHour: number, timeMinute: number, timeSecond: number, timeNanosecond: number); -export function formatIso(dateTimeFormatterLocaleName: string, dateTimeFormatterLength: DateTimeLength, dateYear: number, dateMonth: number, dateDay: number, timeHour: number, timeMinute: number, timeSecond: number, timeNanosecond: number); +export function formatIso(dateTimeFormatterLocaleName: string, dateTimeFormatterLength: DateTimeLength, dateTimeFormatterTimePrecision: TimePrecision, dateTimeFormatterAlignment: DateTimeAlignment, dateTimeFormatterYearStyle: YearStyle, dateYear: number, dateMonth: number, dateDay: number, timeHour: number, timeMinute: number, timeSecond: number, timeNanosecond: number); +export function formatSameCalendar(dateTimeFormatterLocaleName: string, dateTimeFormatterLength: DateTimeLength, dateTimeFormatterTimePrecision: TimePrecision, dateTimeFormatterAlignment: DateTimeAlignment, dateTimeFormatterYearStyle: YearStyle, dateYear: number, dateMonth: number, dateDay: number, dateCalendarLocaleName: string, timeHour: number, timeMinute: number, timeSecond: number, timeNanosecond: number); diff --git a/ffi/capi/bindings/demo_gen/DateTimeFormatter.mjs b/ffi/capi/bindings/demo_gen/DateTimeFormatter.mjs index 2c60481e42d..943a49dfcc8 100644 --- a/ffi/capi/bindings/demo_gen/DateTimeFormatter.mjs +++ b/ffi/capi/bindings/demo_gen/DateTimeFormatter.mjs @@ -4,36 +4,36 @@ import { DateTimeFormatter } from "icu4x" import { IsoDate } from "icu4x" import { Locale } from "icu4x" import { Time } from "icu4x" -export function format(dateTimeFormatterLocaleName, dateTimeFormatterLength, dateYear, dateMonth, dateDay, dateCalendarLocaleName, timeHour, timeMinute, timeSecond, timeNanosecond) { +export function formatIso(dateTimeFormatterLocaleName, dateTimeFormatterLength, dateTimeFormatterTimePrecision, dateTimeFormatterAlignment, dateTimeFormatterYearStyle, dateYear, dateMonth, dateDay, timeHour, timeMinute, timeSecond, timeNanosecond) { let dateTimeFormatterLocale = Locale.fromString(dateTimeFormatterLocaleName); - let dateTimeFormatter = DateTimeFormatter.createWithLength(dateTimeFormatterLocale,dateTimeFormatterLength); + let dateTimeFormatter = DateTimeFormatter.createYmdt(dateTimeFormatterLocale,dateTimeFormatterLength,dateTimeFormatterTimePrecision,dateTimeFormatterAlignment,dateTimeFormatterYearStyle); - let dateCalendarLocale = Locale.fromString(dateCalendarLocaleName); - - let dateCalendar = Calendar.createForLocale(dateCalendarLocale); - - let date = Date.fromIsoInCalendar(dateYear,dateMonth,dateDay,dateCalendar); + let date = new IsoDate(dateYear,dateMonth,dateDay); let time = new Time(timeHour,timeMinute,timeSecond,timeNanosecond); - let out = dateTimeFormatter.format(date,time); + let out = dateTimeFormatter.formatIso(date,time); return out; } -export function formatIso(dateTimeFormatterLocaleName, dateTimeFormatterLength, dateYear, dateMonth, dateDay, timeHour, timeMinute, timeSecond, timeNanosecond) { +export function formatSameCalendar(dateTimeFormatterLocaleName, dateTimeFormatterLength, dateTimeFormatterTimePrecision, dateTimeFormatterAlignment, dateTimeFormatterYearStyle, dateYear, dateMonth, dateDay, dateCalendarLocaleName, timeHour, timeMinute, timeSecond, timeNanosecond) { let dateTimeFormatterLocale = Locale.fromString(dateTimeFormatterLocaleName); - let dateTimeFormatter = DateTimeFormatter.createWithLength(dateTimeFormatterLocale,dateTimeFormatterLength); + let dateTimeFormatter = DateTimeFormatter.createYmdt(dateTimeFormatterLocale,dateTimeFormatterLength,dateTimeFormatterTimePrecision,dateTimeFormatterAlignment,dateTimeFormatterYearStyle); - let date = new IsoDate(dateYear,dateMonth,dateDay); + let dateCalendarLocale = Locale.fromString(dateCalendarLocaleName); + + let dateCalendar = Calendar.createForLocale(dateCalendarLocale); + + let date = Date.fromIsoInCalendar(dateYear,dateMonth,dateDay,dateCalendar); let time = new Time(timeHour,timeMinute,timeSecond,timeNanosecond); - let out = dateTimeFormatter.formatIso(date,time); + let out = dateTimeFormatter.formatSameCalendar(date,time); return out; diff --git a/ffi/capi/bindings/demo_gen/DateTimeFormatterGregorian.d.ts b/ffi/capi/bindings/demo_gen/DateTimeFormatterGregorian.d.ts new file mode 100644 index 00000000000..0a533b9a5d6 --- /dev/null +++ b/ffi/capi/bindings/demo_gen/DateTimeFormatterGregorian.d.ts @@ -0,0 +1,5 @@ +import { DateTimeFormatterGregorian } from "icu4x" +import { IsoDate } from "icu4x" +import { Locale } from "icu4x" +import { Time } from "icu4x" +export function formatIso(dateTimeFormatterGregorianLocaleName: string, dateTimeFormatterGregorianLength: DateTimeLength, dateTimeFormatterGregorianTimePrecision: TimePrecision, dateTimeFormatterGregorianAlignment: DateTimeAlignment, dateTimeFormatterGregorianYearStyle: YearStyle, dateYear: number, dateMonth: number, dateDay: number, timeHour: number, timeMinute: number, timeSecond: number, timeNanosecond: number); diff --git a/ffi/capi/bindings/demo_gen/DateTimeFormatterGregorian.mjs b/ffi/capi/bindings/demo_gen/DateTimeFormatterGregorian.mjs new file mode 100644 index 00000000000..aa5ff8265a2 --- /dev/null +++ b/ffi/capi/bindings/demo_gen/DateTimeFormatterGregorian.mjs @@ -0,0 +1,19 @@ +import { DateTimeFormatterGregorian } from "icu4x" +import { IsoDate } from "icu4x" +import { Locale } from "icu4x" +import { Time } from "icu4x" +export function formatIso(dateTimeFormatterGregorianLocaleName, dateTimeFormatterGregorianLength, dateTimeFormatterGregorianTimePrecision, dateTimeFormatterGregorianAlignment, dateTimeFormatterGregorianYearStyle, dateYear, dateMonth, dateDay, timeHour, timeMinute, timeSecond, timeNanosecond) { + + let dateTimeFormatterGregorianLocale = Locale.fromString(dateTimeFormatterGregorianLocaleName); + + let dateTimeFormatterGregorian = DateTimeFormatterGregorian.createYmdt(dateTimeFormatterGregorianLocale,dateTimeFormatterGregorianLength,dateTimeFormatterGregorianTimePrecision,dateTimeFormatterGregorianAlignment,dateTimeFormatterGregorianYearStyle); + + let date = new IsoDate(dateYear,dateMonth,dateDay); + + let time = new Time(timeHour,timeMinute,timeSecond,timeNanosecond); + + let out = dateTimeFormatterGregorian.formatIso(date,time); + + + return out; +} diff --git a/ffi/capi/bindings/demo_gen/GregorianDateTimeFormatter.d.ts b/ffi/capi/bindings/demo_gen/GregorianDateTimeFormatter.d.ts deleted file mode 100644 index 905a097dfab..00000000000 --- a/ffi/capi/bindings/demo_gen/GregorianDateTimeFormatter.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { GregorianDateTimeFormatter } from "icu4x" -import { IsoDate } from "icu4x" -import { Locale } from "icu4x" -import { Time } from "icu4x" -export function formatIso(gregorianDateTimeFormatterLocaleName: string, gregorianDateTimeFormatterLength: DateTimeLength, dateYear: number, dateMonth: number, dateDay: number, timeHour: number, timeMinute: number, timeSecond: number, timeNanosecond: number); diff --git a/ffi/capi/bindings/demo_gen/GregorianDateTimeFormatter.mjs b/ffi/capi/bindings/demo_gen/GregorianDateTimeFormatter.mjs deleted file mode 100644 index d455d9d0d4c..00000000000 --- a/ffi/capi/bindings/demo_gen/GregorianDateTimeFormatter.mjs +++ /dev/null @@ -1,19 +0,0 @@ -import { GregorianDateTimeFormatter } from "icu4x" -import { IsoDate } from "icu4x" -import { Locale } from "icu4x" -import { Time } from "icu4x" -export function formatIso(gregorianDateTimeFormatterLocaleName, gregorianDateTimeFormatterLength, dateYear, dateMonth, dateDay, timeHour, timeMinute, timeSecond, timeNanosecond) { - - let gregorianDateTimeFormatterLocale = Locale.fromString(gregorianDateTimeFormatterLocaleName); - - let gregorianDateTimeFormatter = GregorianDateTimeFormatter.createWithLength(gregorianDateTimeFormatterLocale,gregorianDateTimeFormatterLength); - - let date = new IsoDate(dateYear,dateMonth,dateDay); - - let time = new Time(timeHour,timeMinute,timeSecond,timeNanosecond); - - let out = gregorianDateTimeFormatter.formatIso(date,time); - - - return out; -} diff --git a/ffi/capi/bindings/demo_gen/index.mjs b/ffi/capi/bindings/demo_gen/index.mjs index fea60f0c611..4d4637daa86 100644 --- a/ffi/capi/bindings/demo_gen/index.mjs +++ b/ffi/capi/bindings/demo_gen/index.mjs @@ -7,12 +7,8 @@ import * as DateDemo from "./Date.mjs"; export * as DateDemo from "./Date.mjs"; import * as DateFormatterDemo from "./DateFormatter.mjs"; export * as DateFormatterDemo from "./DateFormatter.mjs"; -import * as DateTimeFormatterDemo from "./DateTimeFormatter.mjs"; -export * as DateTimeFormatterDemo from "./DateTimeFormatter.mjs"; import * as GregorianDateFormatterDemo from "./GregorianDateFormatter.mjs"; export * as GregorianDateFormatterDemo from "./GregorianDateFormatter.mjs"; -import * as GregorianDateTimeFormatterDemo from "./GregorianDateTimeFormatter.mjs"; -export * as GregorianDateTimeFormatterDemo from "./GregorianDateTimeFormatter.mjs"; import * as TimeFormatterDemo from "./TimeFormatter.mjs"; export * as TimeFormatterDemo from "./TimeFormatter.mjs"; import * as DecimalFormatterDemo from "./DecimalFormatter.mjs"; @@ -23,6 +19,10 @@ import * as ListFormatterDemo from "./ListFormatter.mjs"; export * as ListFormatterDemo from "./ListFormatter.mjs"; import * as LocaleDemo from "./Locale.mjs"; export * as LocaleDemo from "./Locale.mjs"; +import * as DateTimeFormatterDemo from "./DateTimeFormatter.mjs"; +export * as DateTimeFormatterDemo from "./DateTimeFormatter.mjs"; +import * as DateTimeFormatterGregorianDemo from "./DateTimeFormatterGregorian.mjs"; +export * as DateTimeFormatterGregorianDemo from "./DateTimeFormatterGregorian.mjs"; import * as ComposingNormalizerDemo from "./ComposingNormalizer.mjs"; export * as ComposingNormalizerDemo from "./ComposingNormalizer.mjs"; import * as DecomposingNormalizerDemo from "./DecomposingNormalizer.mjs"; @@ -332,138 +332,6 @@ let termini = Object.assign({ ] }, - "DateTimeFormatter.format": { - func: DateTimeFormatterDemo.format, - // For avoiding webpacking minifying issues: - funcName: "DateTimeFormatter.format", - parameters: [ - - { - name: "DateTimeFormatter:Locale:Name", - type: "string", - typeUse: "string" - }, - - { - name: "DateTimeFormatter:Length", - type: "DateTimeLength", - typeUse: "enumerator" - }, - - { - name: "Date:Year", - type: "number", - typeUse: "number" - }, - - { - name: "Date:Month", - type: "number", - typeUse: "number" - }, - - { - name: "Date:Day", - type: "number", - typeUse: "number" - }, - - { - name: "Date:Calendar:Locale:Name", - type: "string", - typeUse: "string" - }, - - { - name: "Time:Hour", - type: "number", - typeUse: "number" - }, - - { - name: "Time:Minute", - type: "number", - typeUse: "number" - }, - - { - name: "Time:Second", - type: "number", - typeUse: "number" - }, - - { - name: "Time:Nanosecond", - type: "number", - typeUse: "number" - } - - ] - }, - - "DateTimeFormatter.formatIso": { - func: DateTimeFormatterDemo.formatIso, - // For avoiding webpacking minifying issues: - funcName: "DateTimeFormatter.formatIso", - parameters: [ - - { - name: "DateTimeFormatter:Locale:Name", - type: "string", - typeUse: "string" - }, - - { - name: "DateTimeFormatter:Length", - type: "DateTimeLength", - typeUse: "enumerator" - }, - - { - name: "Date:Year", - type: "number", - typeUse: "number" - }, - - { - name: "Date:Month", - type: "number", - typeUse: "number" - }, - - { - name: "Date:Day", - type: "number", - typeUse: "number" - }, - - { - name: "Time:Hour", - type: "number", - typeUse: "number" - }, - - { - name: "Time:Minute", - type: "number", - typeUse: "number" - }, - - { - name: "Time:Second", - type: "number", - typeUse: "number" - }, - - { - name: "Time:Nanosecond", - type: "number", - typeUse: "number" - } - - ] - }, - "GregorianDateFormatter.formatIso": { func: GregorianDateFormatterDemo.formatIso, // For avoiding webpacking minifying issues: @@ -503,69 +371,6 @@ let termini = Object.assign({ ] }, - "GregorianDateTimeFormatter.formatIso": { - func: GregorianDateTimeFormatterDemo.formatIso, - // For avoiding webpacking minifying issues: - funcName: "GregorianDateTimeFormatter.formatIso", - parameters: [ - - { - name: "GregorianDateTimeFormatter:Locale:Name", - type: "string", - typeUse: "string" - }, - - { - name: "GregorianDateTimeFormatter:Length", - type: "DateTimeLength", - typeUse: "enumerator" - }, - - { - name: "Date:Year", - type: "number", - typeUse: "number" - }, - - { - name: "Date:Month", - type: "number", - typeUse: "number" - }, - - { - name: "Date:Day", - type: "number", - typeUse: "number" - }, - - { - name: "Time:Hour", - type: "number", - typeUse: "number" - }, - - { - name: "Time:Minute", - type: "number", - typeUse: "number" - }, - - { - name: "Time:Second", - type: "number", - typeUse: "number" - }, - - { - name: "Time:Nanosecond", - type: "number", - typeUse: "number" - } - - ] - }, - "TimeFormatter.format": { func: TimeFormatterDemo.format, // For avoiding webpacking minifying issues: @@ -803,6 +608,255 @@ let termini = Object.assign({ ] }, + "DateTimeFormatter.formatIso": { + func: DateTimeFormatterDemo.formatIso, + // For avoiding webpacking minifying issues: + funcName: "DateTimeFormatter.formatIso", + parameters: [ + + { + name: "DateTimeFormatter:Locale:Name", + type: "string", + typeUse: "string" + }, + + { + name: "DateTimeFormatter:Length", + type: "DateTimeLength", + typeUse: "enumerator" + }, + + { + name: "DateTimeFormatter:TimePrecision", + type: "TimePrecision", + typeUse: "enumerator" + }, + + { + name: "DateTimeFormatter:Alignment", + type: "DateTimeAlignment", + typeUse: "enumerator" + }, + + { + name: "DateTimeFormatter:YearStyle", + type: "YearStyle", + typeUse: "enumerator" + }, + + { + name: "Date:Year", + type: "number", + typeUse: "number" + }, + + { + name: "Date:Month", + type: "number", + typeUse: "number" + }, + + { + name: "Date:Day", + type: "number", + typeUse: "number" + }, + + { + name: "Time:Hour", + type: "number", + typeUse: "number" + }, + + { + name: "Time:Minute", + type: "number", + typeUse: "number" + }, + + { + name: "Time:Second", + type: "number", + typeUse: "number" + }, + + { + name: "Time:Nanosecond", + type: "number", + typeUse: "number" + } + + ] + }, + + "DateTimeFormatter.formatSameCalendar": { + func: DateTimeFormatterDemo.formatSameCalendar, + // For avoiding webpacking minifying issues: + funcName: "DateTimeFormatter.formatSameCalendar", + parameters: [ + + { + name: "DateTimeFormatter:Locale:Name", + type: "string", + typeUse: "string" + }, + + { + name: "DateTimeFormatter:Length", + type: "DateTimeLength", + typeUse: "enumerator" + }, + + { + name: "DateTimeFormatter:TimePrecision", + type: "TimePrecision", + typeUse: "enumerator" + }, + + { + name: "DateTimeFormatter:Alignment", + type: "DateTimeAlignment", + typeUse: "enumerator" + }, + + { + name: "DateTimeFormatter:YearStyle", + type: "YearStyle", + typeUse: "enumerator" + }, + + { + name: "Date:Year", + type: "number", + typeUse: "number" + }, + + { + name: "Date:Month", + type: "number", + typeUse: "number" + }, + + { + name: "Date:Day", + type: "number", + typeUse: "number" + }, + + { + name: "Date:Calendar:Locale:Name", + type: "string", + typeUse: "string" + }, + + { + name: "Time:Hour", + type: "number", + typeUse: "number" + }, + + { + name: "Time:Minute", + type: "number", + typeUse: "number" + }, + + { + name: "Time:Second", + type: "number", + typeUse: "number" + }, + + { + name: "Time:Nanosecond", + type: "number", + typeUse: "number" + } + + ] + }, + + "DateTimeFormatterGregorian.formatIso": { + func: DateTimeFormatterGregorianDemo.formatIso, + // For avoiding webpacking minifying issues: + funcName: "DateTimeFormatterGregorian.formatIso", + parameters: [ + + { + name: "DateTimeFormatterGregorian:Locale:Name", + type: "string", + typeUse: "string" + }, + + { + name: "DateTimeFormatterGregorian:Length", + type: "DateTimeLength", + typeUse: "enumerator" + }, + + { + name: "DateTimeFormatterGregorian:TimePrecision", + type: "TimePrecision", + typeUse: "enumerator" + }, + + { + name: "DateTimeFormatterGregorian:Alignment", + type: "DateTimeAlignment", + typeUse: "enumerator" + }, + + { + name: "DateTimeFormatterGregorian:YearStyle", + type: "YearStyle", + typeUse: "enumerator" + }, + + { + name: "Date:Year", + type: "number", + typeUse: "number" + }, + + { + name: "Date:Month", + type: "number", + typeUse: "number" + }, + + { + name: "Date:Day", + type: "number", + typeUse: "number" + }, + + { + name: "Time:Hour", + type: "number", + typeUse: "number" + }, + + { + name: "Time:Minute", + type: "number", + typeUse: "number" + }, + + { + name: "Time:Second", + type: "number", + typeUse: "number" + }, + + { + name: "Time:Nanosecond", + type: "number", + typeUse: "number" + } + + ] + }, + "ComposingNormalizer.normalize": { func: ComposingNormalizerDemo.normalize, // For avoiding webpacking minifying issues: diff --git a/ffi/capi/bindings/js/DateTimeAlignment.d.ts b/ffi/capi/bindings/js/DateTimeAlignment.d.ts new file mode 100644 index 00000000000..7a782e813ee --- /dev/null +++ b/ffi/capi/bindings/js/DateTimeAlignment.d.ts @@ -0,0 +1,22 @@ +// generated by diplomat-tool +import type { pointer, codepoint } from "./diplomat-runtime.d.ts"; + + +/** See the [Rust documentation for `Alignment`](https://docs.rs/icu/latest/icu/datetime/enum.Alignment.html) for more information. +*/ + + +export class DateTimeAlignment { + + + static fromValue(value : DateTimeAlignment | string) : DateTimeAlignment; + + get value() : string; + + get ffiValue() : number; + + static Auto : DateTimeAlignment; + static Column : DateTimeAlignment; + + constructor(value: DateTimeAlignment | string ); +} \ No newline at end of file diff --git a/ffi/capi/bindings/js/DateTimeAlignment.mjs b/ffi/capi/bindings/js/DateTimeAlignment.mjs new file mode 100644 index 00000000000..cc584453558 --- /dev/null +++ b/ffi/capi/bindings/js/DateTimeAlignment.mjs @@ -0,0 +1,70 @@ +// generated by diplomat-tool +import wasm from "./diplomat-wasm.mjs"; +import * as diplomatRuntime from "./diplomat-runtime.mjs"; + + +/** See the [Rust documentation for `Alignment`](https://docs.rs/icu/latest/icu/datetime/enum.Alignment.html) for more information. +*/ + + +export class DateTimeAlignment { + + #value = undefined; + + static #values = new Map([ + ["Auto", 0], + ["Column", 1] + ]); + + static getAllEntries() { + return DateTimeAlignment.#values.entries(); + } + + #internalConstructor(value) { + if (arguments.length > 1 && arguments[0] === diplomatRuntime.internalConstructor) { + // We pass in two internalConstructor arguments to create *new* + // instances of this type, otherwise the enums are treated as singletons. + if (arguments[1] === diplomatRuntime.internalConstructor ) { + this.#value = arguments[2]; + return this; + } + return DateTimeAlignment.#objectValues[arguments[1]]; + } + + if (value instanceof DateTimeAlignment) { + return value; + } + + let intVal = DateTimeAlignment.#values.get(value); + + // Nullish check, checks for null or undefined + if (intVal != null) { + return DateTimeAlignment.#objectValues[intVal]; + } + + throw TypeError(value + " is not a DateTimeAlignment and does not correspond to any of its enumerator values."); + } + + static fromValue(value) { + return new DateTimeAlignment(value); + } + + get value() { + return [...DateTimeAlignment.#values.keys()][this.#value]; + } + + get ffiValue() { + return this.#value; + } + static #objectValues = [ + new DateTimeAlignment(diplomatRuntime.internalConstructor, diplomatRuntime.internalConstructor, 0), + new DateTimeAlignment(diplomatRuntime.internalConstructor, diplomatRuntime.internalConstructor, 1), + ]; + + static Auto = DateTimeAlignment.#objectValues[0]; + static Column = DateTimeAlignment.#objectValues[1]; + + constructor(value) { + return this.#internalConstructor(...arguments) + } +} \ No newline at end of file diff --git a/ffi/capi/bindings/js/DateTimeFormatter.d.ts b/ffi/capi/bindings/js/DateTimeFormatter.d.ts index 117d740ca73..10837a15928 100644 --- a/ffi/capi/bindings/js/DateTimeFormatter.d.ts +++ b/ffi/capi/bindings/js/DateTimeFormatter.d.ts @@ -1,22 +1,19 @@ // generated by diplomat-tool -import type { Calendar } from "./Calendar" import type { DataProvider } from "./DataProvider" import type { Date } from "./Date" -import type { DateTimeFormatError } from "./DateTimeFormatError" +import type { DateTimeAlignment } from "./DateTimeAlignment" import type { DateTimeFormatterLoadError } from "./DateTimeFormatterLoadError" import type { DateTimeLength } from "./DateTimeLength" +import type { DateTimeMismatchedCalendarError } from "./DateTimeMismatchedCalendarError" import type { IsoDate } from "./IsoDate" import type { Locale } from "./Locale" import type { Time } from "./Time" +import type { TimePrecision } from "./TimePrecision" +import type { YearStyle } from "./YearStyle" import type { pointer, codepoint } from "./diplomat-runtime.d.ts"; -/** An ICU4X DateFormatter object capable of formatting a [`Date`] and a [`Time`] as a string, -*using some calendar specified at runtime in the locale. -* -*See the [Rust documentation for `DateTimeFormatter`](https://docs.rs/icu/latest/icu/datetime/struct.DateTimeFormatter.html) for more information. -* -*Additional information: [1](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.YMDT.html) +/** See the [Rust documentation for `DateTimeFormatter`](https://docs.rs/icu/latest/icu/datetime/type.DateTimeFormatter.html) for more information. */ @@ -24,13 +21,35 @@ export class DateTimeFormatter { get ffiValue(): pointer; - static createWithLength(locale: Locale, length: DateTimeLength): DateTimeFormatter; + static createDt(locale: Locale, length: DateTimeLength | null, timePrecision: TimePrecision | null, alignment: DateTimeAlignment | null): DateTimeFormatter; - static createWithLengthAndProvider(provider: DataProvider, locale: Locale, length: DateTimeLength): DateTimeFormatter; + static createDtWithProvider(provider: DataProvider, locale: Locale, length: DateTimeLength | null, timePrecision: TimePrecision | null, alignment: DateTimeAlignment | null): DateTimeFormatter; - format(date: Date, time: Time): string; + static createMdt(locale: Locale, length: DateTimeLength | null, timePrecision: TimePrecision | null, alignment: DateTimeAlignment | null): DateTimeFormatter; + + static createMdtWithProvider(provider: DataProvider, locale: Locale, length: DateTimeLength | null, timePrecision: TimePrecision | null, alignment: DateTimeAlignment | null): DateTimeFormatter; + + static createYmdt(locale: Locale, length: DateTimeLength | null, timePrecision: TimePrecision | null, alignment: DateTimeAlignment | null, yearStyle: YearStyle | null): DateTimeFormatter; + + static createYmdtWithProvider(provider: DataProvider, locale: Locale, length: DateTimeLength | null, timePrecision: TimePrecision | null, alignment: DateTimeAlignment | null, yearStyle: YearStyle | null): DateTimeFormatter; + + static createDet(locale: Locale, length: DateTimeLength | null, timePrecision: TimePrecision | null, alignment: DateTimeAlignment | null): DateTimeFormatter; + + static createDetWithProvider(provider: DataProvider, locale: Locale, length: DateTimeLength | null, timePrecision: TimePrecision | null, alignment: DateTimeAlignment | null): DateTimeFormatter; + + static createMdet(locale: Locale, length: DateTimeLength | null, timePrecision: TimePrecision | null, alignment: DateTimeAlignment | null): DateTimeFormatter; + + static createMdetWithProvider(provider: DataProvider, locale: Locale, length: DateTimeLength | null, timePrecision: TimePrecision | null, alignment: DateTimeAlignment | null): DateTimeFormatter; + + static createYmdet(locale: Locale, length: DateTimeLength | null, timePrecision: TimePrecision | null, alignment: DateTimeAlignment | null, yearStyle: YearStyle | null): DateTimeFormatter; + + static createYmdetWithProvider(provider: DataProvider, locale: Locale, length: DateTimeLength | null, timePrecision: TimePrecision | null, alignment: DateTimeAlignment | null, yearStyle: YearStyle | null): DateTimeFormatter; + + static createEt(locale: Locale, length: DateTimeLength | null, timePrecision: TimePrecision | null, alignment: DateTimeAlignment | null): DateTimeFormatter; + + static createEtWithProvider(provider: DataProvider, locale: Locale, length: DateTimeLength | null, timePrecision: TimePrecision | null, alignment: DateTimeAlignment | null): DateTimeFormatter; formatIso(date: IsoDate, time: Time): string; - calendar(): Calendar; + formatSameCalendar(date: Date, time: Time): string; } \ No newline at end of file diff --git a/ffi/capi/bindings/js/DateTimeFormatter.mjs b/ffi/capi/bindings/js/DateTimeFormatter.mjs index adef41ec230..d66c3487807 100644 --- a/ffi/capi/bindings/js/DateTimeFormatter.mjs +++ b/ffi/capi/bindings/js/DateTimeFormatter.mjs @@ -1,23 +1,20 @@ // generated by diplomat-tool -import { Calendar } from "./Calendar.mjs" import { DataProvider } from "./DataProvider.mjs" import { Date } from "./Date.mjs" -import { DateTimeFormatError } from "./DateTimeFormatError.mjs" +import { DateTimeAlignment } from "./DateTimeAlignment.mjs" import { DateTimeFormatterLoadError } from "./DateTimeFormatterLoadError.mjs" import { DateTimeLength } from "./DateTimeLength.mjs" +import { DateTimeMismatchedCalendarError } from "./DateTimeMismatchedCalendarError.mjs" import { IsoDate } from "./IsoDate.mjs" import { Locale } from "./Locale.mjs" import { Time } from "./Time.mjs" +import { TimePrecision } from "./TimePrecision.mjs" +import { YearStyle } from "./YearStyle.mjs" import wasm from "./diplomat-wasm.mjs"; import * as diplomatRuntime from "./diplomat-runtime.mjs"; -/** An ICU4X DateFormatter object capable of formatting a [`Date`] and a [`Time`] as a string, -*using some calendar specified at runtime in the locale. -* -*See the [Rust documentation for `DateTimeFormatter`](https://docs.rs/icu/latest/icu/datetime/struct.DateTimeFormatter.html) for more information. -* -*Additional information: [1](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.YMDT.html) +/** See the [Rust documentation for `DateTimeFormatter`](https://docs.rs/icu/latest/icu/datetime/type.DateTimeFormatter.html) for more information. */ const DateTimeFormatter_box_destroy_registry = new FinalizationRegistry((ptr) => { wasm.icu4x_DateTimeFormatter_destroy_mv1(ptr); @@ -52,10 +49,10 @@ export class DateTimeFormatter { return this.#ptr; } - static createWithLength(locale, length) { + static createDt(locale, length, timePrecision, alignment) { const diplomatReceive = new diplomatRuntime.DiplomatReceiveBuf(wasm, 5, 4, true); - const result = wasm.icu4x_DateTimeFormatter_create_with_length_mv1(diplomatReceive.buffer, locale.ffiValue, length.ffiValue); + const result = wasm.icu4x_DateTimeFormatter_create_dt_mv1(diplomatReceive.buffer, locale.ffiValue, ...diplomatRuntime.optionToArgsForCalling(length, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)]), ...diplomatRuntime.optionToArgsForCalling(timePrecision, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)]), ...diplomatRuntime.optionToArgsForCalling(alignment, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)])); try { if (!diplomatReceive.resultFlag) { @@ -70,10 +67,10 @@ export class DateTimeFormatter { } } - static createWithLengthAndProvider(provider, locale, length) { + static createDtWithProvider(provider, locale, length, timePrecision, alignment) { const diplomatReceive = new diplomatRuntime.DiplomatReceiveBuf(wasm, 5, 4, true); - const result = wasm.icu4x_DateTimeFormatter_create_with_length_and_provider_mv1(diplomatReceive.buffer, provider.ffiValue, locale.ffiValue, length.ffiValue); + const result = wasm.icu4x_DateTimeFormatter_create_dt_with_provider_mv1(diplomatReceive.buffer, provider.ffiValue, locale.ffiValue, ...diplomatRuntime.optionToArgsForCalling(length, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)]), ...diplomatRuntime.optionToArgsForCalling(timePrecision, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)]), ...diplomatRuntime.optionToArgsForCalling(alignment, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)])); try { if (!diplomatReceive.resultFlag) { @@ -88,58 +85,255 @@ export class DateTimeFormatter { } } - format(date, time) { + static createMdt(locale, length, timePrecision, alignment) { const diplomatReceive = new diplomatRuntime.DiplomatReceiveBuf(wasm, 5, 4, true); - const write = new diplomatRuntime.DiplomatWriteBuf(wasm); + const result = wasm.icu4x_DateTimeFormatter_create_mdt_mv1(diplomatReceive.buffer, locale.ffiValue, ...diplomatRuntime.optionToArgsForCalling(length, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)]), ...diplomatRuntime.optionToArgsForCalling(timePrecision, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)]), ...diplomatRuntime.optionToArgsForCalling(alignment, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)])); + + try { + if (!diplomatReceive.resultFlag) { + const cause = new DateTimeFormatterLoadError(diplomatRuntime.internalConstructor, diplomatRuntime.enumDiscriminant(wasm, diplomatReceive.buffer)); + throw new globalThis.Error('DateTimeFormatterLoadError: ' + cause.value, { cause }); + } + return new DateTimeFormatter(diplomatRuntime.internalConstructor, diplomatRuntime.ptrRead(wasm, diplomatReceive.buffer), []); + } + + finally { + diplomatReceive.free(); + } + } + + static createMdtWithProvider(provider, locale, length, timePrecision, alignment) { + const diplomatReceive = new diplomatRuntime.DiplomatReceiveBuf(wasm, 5, 4, true); - const result = wasm.icu4x_DateTimeFormatter_format_mv1(diplomatReceive.buffer, this.ffiValue, date.ffiValue, time.ffiValue, write.buffer); + const result = wasm.icu4x_DateTimeFormatter_create_mdt_with_provider_mv1(diplomatReceive.buffer, provider.ffiValue, locale.ffiValue, ...diplomatRuntime.optionToArgsForCalling(length, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)]), ...diplomatRuntime.optionToArgsForCalling(timePrecision, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)]), ...diplomatRuntime.optionToArgsForCalling(alignment, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)])); try { if (!diplomatReceive.resultFlag) { - const cause = new DateTimeFormatError(diplomatRuntime.internalConstructor, diplomatRuntime.enumDiscriminant(wasm, diplomatReceive.buffer)); - throw new globalThis.Error('DateTimeFormatError: ' + cause.value, { cause }); + const cause = new DateTimeFormatterLoadError(diplomatRuntime.internalConstructor, diplomatRuntime.enumDiscriminant(wasm, diplomatReceive.buffer)); + throw new globalThis.Error('DateTimeFormatterLoadError: ' + cause.value, { cause }); } - return write.readString8(); + return new DateTimeFormatter(diplomatRuntime.internalConstructor, diplomatRuntime.ptrRead(wasm, diplomatReceive.buffer), []); } finally { diplomatReceive.free(); + } + } + + static createYmdt(locale, length, timePrecision, alignment, yearStyle) { + const diplomatReceive = new diplomatRuntime.DiplomatReceiveBuf(wasm, 5, 4, true); - write.free(); + const result = wasm.icu4x_DateTimeFormatter_create_ymdt_mv1(diplomatReceive.buffer, locale.ffiValue, ...diplomatRuntime.optionToArgsForCalling(length, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)]), ...diplomatRuntime.optionToArgsForCalling(timePrecision, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)]), ...diplomatRuntime.optionToArgsForCalling(alignment, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)]), ...diplomatRuntime.optionToArgsForCalling(yearStyle, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)])); + + try { + if (!diplomatReceive.resultFlag) { + const cause = new DateTimeFormatterLoadError(diplomatRuntime.internalConstructor, diplomatRuntime.enumDiscriminant(wasm, diplomatReceive.buffer)); + throw new globalThis.Error('DateTimeFormatterLoadError: ' + cause.value, { cause }); + } + return new DateTimeFormatter(diplomatRuntime.internalConstructor, diplomatRuntime.ptrRead(wasm, diplomatReceive.buffer), []); + } + + finally { + diplomatReceive.free(); } } - formatIso(date, time) { + static createYmdtWithProvider(provider, locale, length, timePrecision, alignment, yearStyle) { const diplomatReceive = new diplomatRuntime.DiplomatReceiveBuf(wasm, 5, 4, true); - const write = new diplomatRuntime.DiplomatWriteBuf(wasm); + const result = wasm.icu4x_DateTimeFormatter_create_ymdt_with_provider_mv1(diplomatReceive.buffer, provider.ffiValue, locale.ffiValue, ...diplomatRuntime.optionToArgsForCalling(length, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)]), ...diplomatRuntime.optionToArgsForCalling(timePrecision, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)]), ...diplomatRuntime.optionToArgsForCalling(alignment, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)]), ...diplomatRuntime.optionToArgsForCalling(yearStyle, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)])); + + try { + if (!diplomatReceive.resultFlag) { + const cause = new DateTimeFormatterLoadError(diplomatRuntime.internalConstructor, diplomatRuntime.enumDiscriminant(wasm, diplomatReceive.buffer)); + throw new globalThis.Error('DateTimeFormatterLoadError: ' + cause.value, { cause }); + } + return new DateTimeFormatter(diplomatRuntime.internalConstructor, diplomatRuntime.ptrRead(wasm, diplomatReceive.buffer), []); + } - const result = wasm.icu4x_DateTimeFormatter_format_iso_mv1(diplomatReceive.buffer, this.ffiValue, date.ffiValue, time.ffiValue, write.buffer); + finally { + diplomatReceive.free(); + } + } + + static createDet(locale, length, timePrecision, alignment) { + const diplomatReceive = new diplomatRuntime.DiplomatReceiveBuf(wasm, 5, 4, true); + + const result = wasm.icu4x_DateTimeFormatter_create_det_mv1(diplomatReceive.buffer, locale.ffiValue, ...diplomatRuntime.optionToArgsForCalling(length, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)]), ...diplomatRuntime.optionToArgsForCalling(timePrecision, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)]), ...diplomatRuntime.optionToArgsForCalling(alignment, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)])); try { if (!diplomatReceive.resultFlag) { - const cause = new DateTimeFormatError(diplomatRuntime.internalConstructor, diplomatRuntime.enumDiscriminant(wasm, diplomatReceive.buffer)); - throw new globalThis.Error('DateTimeFormatError: ' + cause.value, { cause }); + const cause = new DateTimeFormatterLoadError(diplomatRuntime.internalConstructor, diplomatRuntime.enumDiscriminant(wasm, diplomatReceive.buffer)); + throw new globalThis.Error('DateTimeFormatterLoadError: ' + cause.value, { cause }); } - return write.readString8(); + return new DateTimeFormatter(diplomatRuntime.internalConstructor, diplomatRuntime.ptrRead(wasm, diplomatReceive.buffer), []); + } + + finally { + diplomatReceive.free(); + } + } + + static createDetWithProvider(provider, locale, length, timePrecision, alignment) { + const diplomatReceive = new diplomatRuntime.DiplomatReceiveBuf(wasm, 5, 4, true); + + const result = wasm.icu4x_DateTimeFormatter_create_det_with_provider_mv1(diplomatReceive.buffer, provider.ffiValue, locale.ffiValue, ...diplomatRuntime.optionToArgsForCalling(length, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)]), ...diplomatRuntime.optionToArgsForCalling(timePrecision, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)]), ...diplomatRuntime.optionToArgsForCalling(alignment, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)])); + + try { + if (!diplomatReceive.resultFlag) { + const cause = new DateTimeFormatterLoadError(diplomatRuntime.internalConstructor, diplomatRuntime.enumDiscriminant(wasm, diplomatReceive.buffer)); + throw new globalThis.Error('DateTimeFormatterLoadError: ' + cause.value, { cause }); + } + return new DateTimeFormatter(diplomatRuntime.internalConstructor, diplomatRuntime.ptrRead(wasm, diplomatReceive.buffer), []); + } + + finally { + diplomatReceive.free(); + } + } + + static createMdet(locale, length, timePrecision, alignment) { + const diplomatReceive = new diplomatRuntime.DiplomatReceiveBuf(wasm, 5, 4, true); + + const result = wasm.icu4x_DateTimeFormatter_create_mdet_mv1(diplomatReceive.buffer, locale.ffiValue, ...diplomatRuntime.optionToArgsForCalling(length, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)]), ...diplomatRuntime.optionToArgsForCalling(timePrecision, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)]), ...diplomatRuntime.optionToArgsForCalling(alignment, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)])); + + try { + if (!diplomatReceive.resultFlag) { + const cause = new DateTimeFormatterLoadError(diplomatRuntime.internalConstructor, diplomatRuntime.enumDiscriminant(wasm, diplomatReceive.buffer)); + throw new globalThis.Error('DateTimeFormatterLoadError: ' + cause.value, { cause }); + } + return new DateTimeFormatter(diplomatRuntime.internalConstructor, diplomatRuntime.ptrRead(wasm, diplomatReceive.buffer), []); + } + + finally { + diplomatReceive.free(); + } + } + + static createMdetWithProvider(provider, locale, length, timePrecision, alignment) { + const diplomatReceive = new diplomatRuntime.DiplomatReceiveBuf(wasm, 5, 4, true); + + const result = wasm.icu4x_DateTimeFormatter_create_mdet_with_provider_mv1(diplomatReceive.buffer, provider.ffiValue, locale.ffiValue, ...diplomatRuntime.optionToArgsForCalling(length, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)]), ...diplomatRuntime.optionToArgsForCalling(timePrecision, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)]), ...diplomatRuntime.optionToArgsForCalling(alignment, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)])); + + try { + if (!diplomatReceive.resultFlag) { + const cause = new DateTimeFormatterLoadError(diplomatRuntime.internalConstructor, diplomatRuntime.enumDiscriminant(wasm, diplomatReceive.buffer)); + throw new globalThis.Error('DateTimeFormatterLoadError: ' + cause.value, { cause }); + } + return new DateTimeFormatter(diplomatRuntime.internalConstructor, diplomatRuntime.ptrRead(wasm, diplomatReceive.buffer), []); + } + + finally { + diplomatReceive.free(); + } + } + + static createYmdet(locale, length, timePrecision, alignment, yearStyle) { + const diplomatReceive = new diplomatRuntime.DiplomatReceiveBuf(wasm, 5, 4, true); + + const result = wasm.icu4x_DateTimeFormatter_create_ymdet_mv1(diplomatReceive.buffer, locale.ffiValue, ...diplomatRuntime.optionToArgsForCalling(length, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)]), ...diplomatRuntime.optionToArgsForCalling(timePrecision, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)]), ...diplomatRuntime.optionToArgsForCalling(alignment, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)]), ...diplomatRuntime.optionToArgsForCalling(yearStyle, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)])); + + try { + if (!diplomatReceive.resultFlag) { + const cause = new DateTimeFormatterLoadError(diplomatRuntime.internalConstructor, diplomatRuntime.enumDiscriminant(wasm, diplomatReceive.buffer)); + throw new globalThis.Error('DateTimeFormatterLoadError: ' + cause.value, { cause }); + } + return new DateTimeFormatter(diplomatRuntime.internalConstructor, diplomatRuntime.ptrRead(wasm, diplomatReceive.buffer), []); + } + + finally { + diplomatReceive.free(); + } + } + + static createYmdetWithProvider(provider, locale, length, timePrecision, alignment, yearStyle) { + const diplomatReceive = new diplomatRuntime.DiplomatReceiveBuf(wasm, 5, 4, true); + + const result = wasm.icu4x_DateTimeFormatter_create_ymdet_with_provider_mv1(diplomatReceive.buffer, provider.ffiValue, locale.ffiValue, ...diplomatRuntime.optionToArgsForCalling(length, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)]), ...diplomatRuntime.optionToArgsForCalling(timePrecision, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)]), ...diplomatRuntime.optionToArgsForCalling(alignment, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)]), ...diplomatRuntime.optionToArgsForCalling(yearStyle, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)])); + + try { + if (!diplomatReceive.resultFlag) { + const cause = new DateTimeFormatterLoadError(diplomatRuntime.internalConstructor, diplomatRuntime.enumDiscriminant(wasm, diplomatReceive.buffer)); + throw new globalThis.Error('DateTimeFormatterLoadError: ' + cause.value, { cause }); + } + return new DateTimeFormatter(diplomatRuntime.internalConstructor, diplomatRuntime.ptrRead(wasm, diplomatReceive.buffer), []); } finally { diplomatReceive.free(); + } + } + + static createEt(locale, length, timePrecision, alignment) { + const diplomatReceive = new diplomatRuntime.DiplomatReceiveBuf(wasm, 5, 4, true); + const result = wasm.icu4x_DateTimeFormatter_create_et_mv1(diplomatReceive.buffer, locale.ffiValue, ...diplomatRuntime.optionToArgsForCalling(length, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)]), ...diplomatRuntime.optionToArgsForCalling(timePrecision, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)]), ...diplomatRuntime.optionToArgsForCalling(alignment, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)])); + + try { + if (!diplomatReceive.resultFlag) { + const cause = new DateTimeFormatterLoadError(diplomatRuntime.internalConstructor, diplomatRuntime.enumDiscriminant(wasm, diplomatReceive.buffer)); + throw new globalThis.Error('DateTimeFormatterLoadError: ' + cause.value, { cause }); + } + return new DateTimeFormatter(diplomatRuntime.internalConstructor, diplomatRuntime.ptrRead(wasm, diplomatReceive.buffer), []); + } + + finally { + diplomatReceive.free(); + } + } + + static createEtWithProvider(provider, locale, length, timePrecision, alignment) { + const diplomatReceive = new diplomatRuntime.DiplomatReceiveBuf(wasm, 5, 4, true); + + const result = wasm.icu4x_DateTimeFormatter_create_et_with_provider_mv1(diplomatReceive.buffer, provider.ffiValue, locale.ffiValue, ...diplomatRuntime.optionToArgsForCalling(length, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)]), ...diplomatRuntime.optionToArgsForCalling(timePrecision, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)]), ...diplomatRuntime.optionToArgsForCalling(alignment, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)])); + + try { + if (!diplomatReceive.resultFlag) { + const cause = new DateTimeFormatterLoadError(diplomatRuntime.internalConstructor, diplomatRuntime.enumDiscriminant(wasm, diplomatReceive.buffer)); + throw new globalThis.Error('DateTimeFormatterLoadError: ' + cause.value, { cause }); + } + return new DateTimeFormatter(diplomatRuntime.internalConstructor, diplomatRuntime.ptrRead(wasm, diplomatReceive.buffer), []); + } + + finally { + diplomatReceive.free(); + } + } + + formatIso(date, time) { + const write = new diplomatRuntime.DiplomatWriteBuf(wasm); + wasm.icu4x_DateTimeFormatter_format_iso_mv1(this.ffiValue, date.ffiValue, time.ffiValue, write.buffer); + + try { + return write.readString8(); + } + + finally { write.free(); } } - calendar() { - const result = wasm.icu4x_DateTimeFormatter_calendar_mv1(this.ffiValue); + formatSameCalendar(date, time) { + const diplomatReceive = new diplomatRuntime.DiplomatReceiveBuf(wasm, 13, 4, true); + + const write = new diplomatRuntime.DiplomatWriteBuf(wasm); + + const result = wasm.icu4x_DateTimeFormatter_format_same_calendar_mv1(diplomatReceive.buffer, this.ffiValue, date.ffiValue, time.ffiValue, write.buffer); try { - return new Calendar(diplomatRuntime.internalConstructor, result, []); + if (!diplomatReceive.resultFlag) { + const cause = DateTimeMismatchedCalendarError._fromFFI(diplomatRuntime.internalConstructor, diplomatReceive.buffer); + throw new globalThis.Error('DateTimeMismatchedCalendarError: ' + cause.toString(), { cause }); + } + return write.readString8(); } - finally {} + finally { + diplomatReceive.free(); + + write.free(); + } } constructor(symbol, ptr, selfEdge) { diff --git a/ffi/capi/bindings/js/DateTimeFormatterGregorian.d.ts b/ffi/capi/bindings/js/DateTimeFormatterGregorian.d.ts new file mode 100644 index 00000000000..7abc6085f9d --- /dev/null +++ b/ffi/capi/bindings/js/DateTimeFormatterGregorian.d.ts @@ -0,0 +1,51 @@ +// generated by diplomat-tool +import type { DataProvider } from "./DataProvider" +import type { DateTimeAlignment } from "./DateTimeAlignment" +import type { DateTimeFormatterLoadError } from "./DateTimeFormatterLoadError" +import type { DateTimeLength } from "./DateTimeLength" +import type { IsoDate } from "./IsoDate" +import type { Locale } from "./Locale" +import type { Time } from "./Time" +import type { TimePrecision } from "./TimePrecision" +import type { YearStyle } from "./YearStyle" +import type { pointer, codepoint } from "./diplomat-runtime.d.ts"; + + +/** See the [Rust documentation for `FixedCalendarDateTimeFormatter`](https://docs.rs/icu/latest/icu/datetime/type.FixedCalendarDateTimeFormatter.html) for more information. +*/ + + +export class DateTimeFormatterGregorian { + + get ffiValue(): pointer; + + static createDt(locale: Locale, length: DateTimeLength | null, timePrecision: TimePrecision | null, alignment: DateTimeAlignment | null): DateTimeFormatterGregorian; + + static createDtWithProvider(provider: DataProvider, locale: Locale, length: DateTimeLength | null, timePrecision: TimePrecision | null, alignment: DateTimeAlignment | null): DateTimeFormatterGregorian; + + static createMdt(locale: Locale, length: DateTimeLength | null, timePrecision: TimePrecision | null, alignment: DateTimeAlignment | null): DateTimeFormatterGregorian; + + static createMdtWithProvider(provider: DataProvider, locale: Locale, length: DateTimeLength | null, timePrecision: TimePrecision | null, alignment: DateTimeAlignment | null): DateTimeFormatterGregorian; + + static createYmdt(locale: Locale, length: DateTimeLength | null, timePrecision: TimePrecision | null, alignment: DateTimeAlignment | null, yearStyle: YearStyle | null): DateTimeFormatterGregorian; + + static createYmdtWithProvider(provider: DataProvider, locale: Locale, length: DateTimeLength | null, timePrecision: TimePrecision | null, alignment: DateTimeAlignment | null, yearStyle: YearStyle | null): DateTimeFormatterGregorian; + + static createDet(locale: Locale, length: DateTimeLength | null, timePrecision: TimePrecision | null, alignment: DateTimeAlignment | null): DateTimeFormatterGregorian; + + static createDetWithProvider(provider: DataProvider, locale: Locale, length: DateTimeLength | null, timePrecision: TimePrecision | null, alignment: DateTimeAlignment | null): DateTimeFormatterGregorian; + + static createMdet(locale: Locale, length: DateTimeLength | null, timePrecision: TimePrecision | null, alignment: DateTimeAlignment | null): DateTimeFormatterGregorian; + + static createMdetWithProvider(provider: DataProvider, locale: Locale, length: DateTimeLength | null, timePrecision: TimePrecision | null, alignment: DateTimeAlignment | null): DateTimeFormatterGregorian; + + static createYmdet(locale: Locale, length: DateTimeLength | null, timePrecision: TimePrecision | null, alignment: DateTimeAlignment | null, yearStyle: YearStyle | null): DateTimeFormatterGregorian; + + static createYmdetWithProvider(provider: DataProvider, locale: Locale, length: DateTimeLength | null, timePrecision: TimePrecision | null, alignment: DateTimeAlignment | null, yearStyle: YearStyle | null): DateTimeFormatterGregorian; + + static createEt(locale: Locale, length: DateTimeLength | null, timePrecision: TimePrecision | null, alignment: DateTimeAlignment | null): DateTimeFormatterGregorian; + + static createEtWithProvider(provider: DataProvider, locale: Locale, length: DateTimeLength | null, timePrecision: TimePrecision | null, alignment: DateTimeAlignment | null): DateTimeFormatterGregorian; + + formatIso(date: IsoDate, time: Time): string; +} \ No newline at end of file diff --git a/ffi/capi/bindings/js/DateTimeFormatterGregorian.mjs b/ffi/capi/bindings/js/DateTimeFormatterGregorian.mjs new file mode 100644 index 00000000000..693e02b5e90 --- /dev/null +++ b/ffi/capi/bindings/js/DateTimeFormatterGregorian.mjs @@ -0,0 +1,318 @@ +// generated by diplomat-tool +import { DataProvider } from "./DataProvider.mjs" +import { DateTimeAlignment } from "./DateTimeAlignment.mjs" +import { DateTimeFormatterLoadError } from "./DateTimeFormatterLoadError.mjs" +import { DateTimeLength } from "./DateTimeLength.mjs" +import { IsoDate } from "./IsoDate.mjs" +import { Locale } from "./Locale.mjs" +import { Time } from "./Time.mjs" +import { TimePrecision } from "./TimePrecision.mjs" +import { YearStyle } from "./YearStyle.mjs" +import wasm from "./diplomat-wasm.mjs"; +import * as diplomatRuntime from "./diplomat-runtime.mjs"; + + +/** See the [Rust documentation for `FixedCalendarDateTimeFormatter`](https://docs.rs/icu/latest/icu/datetime/type.FixedCalendarDateTimeFormatter.html) for more information. +*/ +const DateTimeFormatterGregorian_box_destroy_registry = new FinalizationRegistry((ptr) => { + wasm.icu4x_DateTimeFormatterGregorian_destroy_mv1(ptr); +}); + +export class DateTimeFormatterGregorian { + + // Internal ptr reference: + #ptr = null; + + // Lifetimes are only to keep dependencies alive. + // Since JS won't garbage collect until there are no incoming edges. + #selfEdge = []; + + #internalConstructor(symbol, ptr, selfEdge) { + if (symbol !== diplomatRuntime.internalConstructor) { + console.error("DateTimeFormatterGregorian is an Opaque type. You cannot call its constructor."); + return; + } + + this.#ptr = ptr; + this.#selfEdge = selfEdge; + + // Are we being borrowed? If not, we can register. + if (this.#selfEdge.length === 0) { + DateTimeFormatterGregorian_box_destroy_registry.register(this, this.#ptr); + } + + return this; + } + get ffiValue() { + return this.#ptr; + } + + static createDt(locale, length, timePrecision, alignment) { + const diplomatReceive = new diplomatRuntime.DiplomatReceiveBuf(wasm, 5, 4, true); + + const result = wasm.icu4x_DateTimeFormatterGregorian_create_dt_mv1(diplomatReceive.buffer, locale.ffiValue, ...diplomatRuntime.optionToArgsForCalling(length, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)]), ...diplomatRuntime.optionToArgsForCalling(timePrecision, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)]), ...diplomatRuntime.optionToArgsForCalling(alignment, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)])); + + try { + if (!diplomatReceive.resultFlag) { + const cause = new DateTimeFormatterLoadError(diplomatRuntime.internalConstructor, diplomatRuntime.enumDiscriminant(wasm, diplomatReceive.buffer)); + throw new globalThis.Error('DateTimeFormatterLoadError: ' + cause.value, { cause }); + } + return new DateTimeFormatterGregorian(diplomatRuntime.internalConstructor, diplomatRuntime.ptrRead(wasm, diplomatReceive.buffer), []); + } + + finally { + diplomatReceive.free(); + } + } + + static createDtWithProvider(provider, locale, length, timePrecision, alignment) { + const diplomatReceive = new diplomatRuntime.DiplomatReceiveBuf(wasm, 5, 4, true); + + const result = wasm.icu4x_DateTimeFormatterGregorian_create_dt_with_provider_mv1(diplomatReceive.buffer, provider.ffiValue, locale.ffiValue, ...diplomatRuntime.optionToArgsForCalling(length, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)]), ...diplomatRuntime.optionToArgsForCalling(timePrecision, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)]), ...diplomatRuntime.optionToArgsForCalling(alignment, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)])); + + try { + if (!diplomatReceive.resultFlag) { + const cause = new DateTimeFormatterLoadError(diplomatRuntime.internalConstructor, diplomatRuntime.enumDiscriminant(wasm, diplomatReceive.buffer)); + throw new globalThis.Error('DateTimeFormatterLoadError: ' + cause.value, { cause }); + } + return new DateTimeFormatterGregorian(diplomatRuntime.internalConstructor, diplomatRuntime.ptrRead(wasm, diplomatReceive.buffer), []); + } + + finally { + diplomatReceive.free(); + } + } + + static createMdt(locale, length, timePrecision, alignment) { + const diplomatReceive = new diplomatRuntime.DiplomatReceiveBuf(wasm, 5, 4, true); + + const result = wasm.icu4x_DateTimeFormatterGregorian_create_mdt_mv1(diplomatReceive.buffer, locale.ffiValue, ...diplomatRuntime.optionToArgsForCalling(length, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)]), ...diplomatRuntime.optionToArgsForCalling(timePrecision, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)]), ...diplomatRuntime.optionToArgsForCalling(alignment, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)])); + + try { + if (!diplomatReceive.resultFlag) { + const cause = new DateTimeFormatterLoadError(diplomatRuntime.internalConstructor, diplomatRuntime.enumDiscriminant(wasm, diplomatReceive.buffer)); + throw new globalThis.Error('DateTimeFormatterLoadError: ' + cause.value, { cause }); + } + return new DateTimeFormatterGregorian(diplomatRuntime.internalConstructor, diplomatRuntime.ptrRead(wasm, diplomatReceive.buffer), []); + } + + finally { + diplomatReceive.free(); + } + } + + static createMdtWithProvider(provider, locale, length, timePrecision, alignment) { + const diplomatReceive = new diplomatRuntime.DiplomatReceiveBuf(wasm, 5, 4, true); + + const result = wasm.icu4x_DateTimeFormatterGregorian_create_mdt_with_provider_mv1(diplomatReceive.buffer, provider.ffiValue, locale.ffiValue, ...diplomatRuntime.optionToArgsForCalling(length, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)]), ...diplomatRuntime.optionToArgsForCalling(timePrecision, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)]), ...diplomatRuntime.optionToArgsForCalling(alignment, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)])); + + try { + if (!diplomatReceive.resultFlag) { + const cause = new DateTimeFormatterLoadError(diplomatRuntime.internalConstructor, diplomatRuntime.enumDiscriminant(wasm, diplomatReceive.buffer)); + throw new globalThis.Error('DateTimeFormatterLoadError: ' + cause.value, { cause }); + } + return new DateTimeFormatterGregorian(diplomatRuntime.internalConstructor, diplomatRuntime.ptrRead(wasm, diplomatReceive.buffer), []); + } + + finally { + diplomatReceive.free(); + } + } + + static createYmdt(locale, length, timePrecision, alignment, yearStyle) { + const diplomatReceive = new diplomatRuntime.DiplomatReceiveBuf(wasm, 5, 4, true); + + const result = wasm.icu4x_DateTimeFormatterGregorian_create_ymdt_mv1(diplomatReceive.buffer, locale.ffiValue, ...diplomatRuntime.optionToArgsForCalling(length, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)]), ...diplomatRuntime.optionToArgsForCalling(timePrecision, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)]), ...diplomatRuntime.optionToArgsForCalling(alignment, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)]), ...diplomatRuntime.optionToArgsForCalling(yearStyle, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)])); + + try { + if (!diplomatReceive.resultFlag) { + const cause = new DateTimeFormatterLoadError(diplomatRuntime.internalConstructor, diplomatRuntime.enumDiscriminant(wasm, diplomatReceive.buffer)); + throw new globalThis.Error('DateTimeFormatterLoadError: ' + cause.value, { cause }); + } + return new DateTimeFormatterGregorian(diplomatRuntime.internalConstructor, diplomatRuntime.ptrRead(wasm, diplomatReceive.buffer), []); + } + + finally { + diplomatReceive.free(); + } + } + + static createYmdtWithProvider(provider, locale, length, timePrecision, alignment, yearStyle) { + const diplomatReceive = new diplomatRuntime.DiplomatReceiveBuf(wasm, 5, 4, true); + + const result = wasm.icu4x_DateTimeFormatterGregorian_create_ymdt_with_provider_mv1(diplomatReceive.buffer, provider.ffiValue, locale.ffiValue, ...diplomatRuntime.optionToArgsForCalling(length, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)]), ...diplomatRuntime.optionToArgsForCalling(timePrecision, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)]), ...diplomatRuntime.optionToArgsForCalling(alignment, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)]), ...diplomatRuntime.optionToArgsForCalling(yearStyle, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)])); + + try { + if (!diplomatReceive.resultFlag) { + const cause = new DateTimeFormatterLoadError(diplomatRuntime.internalConstructor, diplomatRuntime.enumDiscriminant(wasm, diplomatReceive.buffer)); + throw new globalThis.Error('DateTimeFormatterLoadError: ' + cause.value, { cause }); + } + return new DateTimeFormatterGregorian(diplomatRuntime.internalConstructor, diplomatRuntime.ptrRead(wasm, diplomatReceive.buffer), []); + } + + finally { + diplomatReceive.free(); + } + } + + static createDet(locale, length, timePrecision, alignment) { + const diplomatReceive = new diplomatRuntime.DiplomatReceiveBuf(wasm, 5, 4, true); + + const result = wasm.icu4x_DateTimeFormatterGregorian_create_det_mv1(diplomatReceive.buffer, locale.ffiValue, ...diplomatRuntime.optionToArgsForCalling(length, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)]), ...diplomatRuntime.optionToArgsForCalling(timePrecision, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)]), ...diplomatRuntime.optionToArgsForCalling(alignment, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)])); + + try { + if (!diplomatReceive.resultFlag) { + const cause = new DateTimeFormatterLoadError(diplomatRuntime.internalConstructor, diplomatRuntime.enumDiscriminant(wasm, diplomatReceive.buffer)); + throw new globalThis.Error('DateTimeFormatterLoadError: ' + cause.value, { cause }); + } + return new DateTimeFormatterGregorian(diplomatRuntime.internalConstructor, diplomatRuntime.ptrRead(wasm, diplomatReceive.buffer), []); + } + + finally { + diplomatReceive.free(); + } + } + + static createDetWithProvider(provider, locale, length, timePrecision, alignment) { + const diplomatReceive = new diplomatRuntime.DiplomatReceiveBuf(wasm, 5, 4, true); + + const result = wasm.icu4x_DateTimeFormatterGregorian_create_det_with_provider_mv1(diplomatReceive.buffer, provider.ffiValue, locale.ffiValue, ...diplomatRuntime.optionToArgsForCalling(length, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)]), ...diplomatRuntime.optionToArgsForCalling(timePrecision, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)]), ...diplomatRuntime.optionToArgsForCalling(alignment, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)])); + + try { + if (!diplomatReceive.resultFlag) { + const cause = new DateTimeFormatterLoadError(diplomatRuntime.internalConstructor, diplomatRuntime.enumDiscriminant(wasm, diplomatReceive.buffer)); + throw new globalThis.Error('DateTimeFormatterLoadError: ' + cause.value, { cause }); + } + return new DateTimeFormatterGregorian(diplomatRuntime.internalConstructor, diplomatRuntime.ptrRead(wasm, diplomatReceive.buffer), []); + } + + finally { + diplomatReceive.free(); + } + } + + static createMdet(locale, length, timePrecision, alignment) { + const diplomatReceive = new diplomatRuntime.DiplomatReceiveBuf(wasm, 5, 4, true); + + const result = wasm.icu4x_DateTimeFormatterGregorian_create_mdet_mv1(diplomatReceive.buffer, locale.ffiValue, ...diplomatRuntime.optionToArgsForCalling(length, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)]), ...diplomatRuntime.optionToArgsForCalling(timePrecision, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)]), ...diplomatRuntime.optionToArgsForCalling(alignment, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)])); + + try { + if (!diplomatReceive.resultFlag) { + const cause = new DateTimeFormatterLoadError(diplomatRuntime.internalConstructor, diplomatRuntime.enumDiscriminant(wasm, diplomatReceive.buffer)); + throw new globalThis.Error('DateTimeFormatterLoadError: ' + cause.value, { cause }); + } + return new DateTimeFormatterGregorian(diplomatRuntime.internalConstructor, diplomatRuntime.ptrRead(wasm, diplomatReceive.buffer), []); + } + + finally { + diplomatReceive.free(); + } + } + + static createMdetWithProvider(provider, locale, length, timePrecision, alignment) { + const diplomatReceive = new diplomatRuntime.DiplomatReceiveBuf(wasm, 5, 4, true); + + const result = wasm.icu4x_DateTimeFormatterGregorian_create_mdet_with_provider_mv1(diplomatReceive.buffer, provider.ffiValue, locale.ffiValue, ...diplomatRuntime.optionToArgsForCalling(length, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)]), ...diplomatRuntime.optionToArgsForCalling(timePrecision, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)]), ...diplomatRuntime.optionToArgsForCalling(alignment, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)])); + + try { + if (!diplomatReceive.resultFlag) { + const cause = new DateTimeFormatterLoadError(diplomatRuntime.internalConstructor, diplomatRuntime.enumDiscriminant(wasm, diplomatReceive.buffer)); + throw new globalThis.Error('DateTimeFormatterLoadError: ' + cause.value, { cause }); + } + return new DateTimeFormatterGregorian(diplomatRuntime.internalConstructor, diplomatRuntime.ptrRead(wasm, diplomatReceive.buffer), []); + } + + finally { + diplomatReceive.free(); + } + } + + static createYmdet(locale, length, timePrecision, alignment, yearStyle) { + const diplomatReceive = new diplomatRuntime.DiplomatReceiveBuf(wasm, 5, 4, true); + + const result = wasm.icu4x_DateTimeFormatterGregorian_create_ymdet_mv1(diplomatReceive.buffer, locale.ffiValue, ...diplomatRuntime.optionToArgsForCalling(length, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)]), ...diplomatRuntime.optionToArgsForCalling(timePrecision, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)]), ...diplomatRuntime.optionToArgsForCalling(alignment, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)]), ...diplomatRuntime.optionToArgsForCalling(yearStyle, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)])); + + try { + if (!diplomatReceive.resultFlag) { + const cause = new DateTimeFormatterLoadError(diplomatRuntime.internalConstructor, diplomatRuntime.enumDiscriminant(wasm, diplomatReceive.buffer)); + throw new globalThis.Error('DateTimeFormatterLoadError: ' + cause.value, { cause }); + } + return new DateTimeFormatterGregorian(diplomatRuntime.internalConstructor, diplomatRuntime.ptrRead(wasm, diplomatReceive.buffer), []); + } + + finally { + diplomatReceive.free(); + } + } + + static createYmdetWithProvider(provider, locale, length, timePrecision, alignment, yearStyle) { + const diplomatReceive = new diplomatRuntime.DiplomatReceiveBuf(wasm, 5, 4, true); + + const result = wasm.icu4x_DateTimeFormatterGregorian_create_ymdet_with_provider_mv1(diplomatReceive.buffer, provider.ffiValue, locale.ffiValue, ...diplomatRuntime.optionToArgsForCalling(length, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)]), ...diplomatRuntime.optionToArgsForCalling(timePrecision, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)]), ...diplomatRuntime.optionToArgsForCalling(alignment, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)]), ...diplomatRuntime.optionToArgsForCalling(yearStyle, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)])); + + try { + if (!diplomatReceive.resultFlag) { + const cause = new DateTimeFormatterLoadError(diplomatRuntime.internalConstructor, diplomatRuntime.enumDiscriminant(wasm, diplomatReceive.buffer)); + throw new globalThis.Error('DateTimeFormatterLoadError: ' + cause.value, { cause }); + } + return new DateTimeFormatterGregorian(diplomatRuntime.internalConstructor, diplomatRuntime.ptrRead(wasm, diplomatReceive.buffer), []); + } + + finally { + diplomatReceive.free(); + } + } + + static createEt(locale, length, timePrecision, alignment) { + const diplomatReceive = new diplomatRuntime.DiplomatReceiveBuf(wasm, 5, 4, true); + + const result = wasm.icu4x_DateTimeFormatterGregorian_create_et_mv1(diplomatReceive.buffer, locale.ffiValue, ...diplomatRuntime.optionToArgsForCalling(length, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)]), ...diplomatRuntime.optionToArgsForCalling(timePrecision, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)]), ...diplomatRuntime.optionToArgsForCalling(alignment, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)])); + + try { + if (!diplomatReceive.resultFlag) { + const cause = new DateTimeFormatterLoadError(diplomatRuntime.internalConstructor, diplomatRuntime.enumDiscriminant(wasm, diplomatReceive.buffer)); + throw new globalThis.Error('DateTimeFormatterLoadError: ' + cause.value, { cause }); + } + return new DateTimeFormatterGregorian(diplomatRuntime.internalConstructor, diplomatRuntime.ptrRead(wasm, diplomatReceive.buffer), []); + } + + finally { + diplomatReceive.free(); + } + } + + static createEtWithProvider(provider, locale, length, timePrecision, alignment) { + const diplomatReceive = new diplomatRuntime.DiplomatReceiveBuf(wasm, 5, 4, true); + + const result = wasm.icu4x_DateTimeFormatterGregorian_create_et_with_provider_mv1(diplomatReceive.buffer, provider.ffiValue, locale.ffiValue, ...diplomatRuntime.optionToArgsForCalling(length, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)]), ...diplomatRuntime.optionToArgsForCalling(timePrecision, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)]), ...diplomatRuntime.optionToArgsForCalling(alignment, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)])); + + try { + if (!diplomatReceive.resultFlag) { + const cause = new DateTimeFormatterLoadError(diplomatRuntime.internalConstructor, diplomatRuntime.enumDiscriminant(wasm, diplomatReceive.buffer)); + throw new globalThis.Error('DateTimeFormatterLoadError: ' + cause.value, { cause }); + } + return new DateTimeFormatterGregorian(diplomatRuntime.internalConstructor, diplomatRuntime.ptrRead(wasm, diplomatReceive.buffer), []); + } + + finally { + diplomatReceive.free(); + } + } + + formatIso(date, time) { + const write = new diplomatRuntime.DiplomatWriteBuf(wasm); + wasm.icu4x_DateTimeFormatterGregorian_format_iso_mv1(this.ffiValue, date.ffiValue, time.ffiValue, write.buffer); + + try { + return write.readString8(); + } + + finally { + write.free(); + } + } + + constructor(symbol, ptr, selfEdge) { + return this.#internalConstructor(...arguments) + } +} \ No newline at end of file diff --git a/ffi/capi/bindings/js/DateTimeMismatchedCalendarError.d.ts b/ffi/capi/bindings/js/DateTimeMismatchedCalendarError.d.ts new file mode 100644 index 00000000000..2ac5dbfa21a --- /dev/null +++ b/ffi/capi/bindings/js/DateTimeMismatchedCalendarError.d.ts @@ -0,0 +1,30 @@ +// generated by diplomat-tool +import type { AnyCalendarKind } from "./AnyCalendarKind" +import type { pointer, codepoint } from "./diplomat-runtime.d.ts"; + + +/** See the [Rust documentation for `MismatchedCalendarError`](https://docs.rs/icu/latest/icu/datetime/struct.MismatchedCalendarError.html) for more information. +*/ +type DateTimeMismatchedCalendarError_obj = { + thisKind: AnyCalendarKind; + dateKind?: AnyCalendarKind | null; +}; + + + +export class DateTimeMismatchedCalendarError { + + get thisKind() : AnyCalendarKind; + set thisKind(value: AnyCalendarKind); + + get dateKind() : AnyCalendarKind | null; + set dateKind(value: AnyCalendarKind | null); + + /** Create `DateTimeMismatchedCalendarError` from an object that contains all of `DateTimeMismatchedCalendarError`s fields. + * Optional fields do not need to be included in the provided object. + */ + static fromFields(structObj : DateTimeMismatchedCalendarError_obj) : DateTimeMismatchedCalendarError; + + + constructor(structObj : DateTimeMismatchedCalendarError_obj); +} \ No newline at end of file diff --git a/ffi/capi/bindings/js/DateTimeMismatchedCalendarError.mjs b/ffi/capi/bindings/js/DateTimeMismatchedCalendarError.mjs new file mode 100644 index 00000000000..e8e196af47d --- /dev/null +++ b/ffi/capi/bindings/js/DateTimeMismatchedCalendarError.mjs @@ -0,0 +1,111 @@ +// generated by diplomat-tool +import { AnyCalendarKind } from "./AnyCalendarKind.mjs" +import wasm from "./diplomat-wasm.mjs"; +import * as diplomatRuntime from "./diplomat-runtime.mjs"; + + +/** See the [Rust documentation for `MismatchedCalendarError`](https://docs.rs/icu/latest/icu/datetime/struct.MismatchedCalendarError.html) for more information. +*/ + + +export class DateTimeMismatchedCalendarError { + + #thisKind; + + get thisKind() { + return this.#thisKind; + } + set thisKind(value) { + this.#thisKind = value; + } + + #dateKind; + + get dateKind() { + return this.#dateKind; + } + set dateKind(value) { + this.#dateKind = value; + } + + /** Create `DateTimeMismatchedCalendarError` from an object that contains all of `DateTimeMismatchedCalendarError`s fields. + * Optional fields do not need to be included in the provided object. + */ + static fromFields(structObj) { + return new DateTimeMismatchedCalendarError(structObj); + } + + #internalConstructor(structObj) { + if (typeof structObj !== "object") { + throw new Error("DateTimeMismatchedCalendarError's constructor takes an object of DateTimeMismatchedCalendarError's fields."); + } + + if ("thisKind" in structObj) { + this.#thisKind = structObj.thisKind; + } else { + throw new Error("Missing required field thisKind."); + } + + if ("dateKind" in structObj) { + this.#dateKind = structObj.dateKind; + } else { + this.#dateKind = null; + } + + return this; + } + + // Return this struct in FFI function friendly format. + // Returns an array that can be expanded with spread syntax (...) + + _intoFFI( + functionCleanupArena, + appendArrayMap + ) { + return [this.#thisKind.ffiValue, ...diplomatRuntime.optionToArgsForCalling(this.#dateKind, 4, 4, false, (arrayBuffer, offset, jsValue) => [diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)])] + } + + static _fromSuppliedValue(internalConstructor, obj) { + if (internalConstructor !== diplomatRuntime.internalConstructor) { + throw new Error("_fromSuppliedValue cannot be called externally."); + } + + if (obj instanceof DateTimeMismatchedCalendarError) { + return obj; + } + + return DateTimeMismatchedCalendarError.fromFields(obj); + } + + _writeToArrayBuffer( + arrayBuffer, + offset, + functionCleanupArena, + appendArrayMap + ) { + diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, this.#thisKind.ffiValue, Int32Array); + diplomatRuntime.writeOptionToArrayBuffer(arrayBuffer, offset + 4, this.#dateKind, 4, 4, (arrayBuffer, offset, jsValue) => diplomatRuntime.writeToArrayBuffer(arrayBuffer, offset + 0, jsValue.ffiValue, Int32Array)); + } + + // This struct contains borrowed fields, so this takes in a list of + // "edges" corresponding to where each lifetime's data may have been borrowed from + // and passes it down to individual fields containing the borrow. + // This method does not attempt to handle any dependencies between lifetimes, the caller + // should handle this when constructing edge arrays. + static _fromFFI(internalConstructor, ptr) { + if (internalConstructor !== diplomatRuntime.internalConstructor) { + throw new Error("DateTimeMismatchedCalendarError._fromFFI is not meant to be called externally. Please use the default constructor."); + } + let structObj = {}; + const thisKindDeref = diplomatRuntime.enumDiscriminant(wasm, ptr); + structObj.thisKind = new AnyCalendarKind(diplomatRuntime.internalConstructor, thisKindDeref); + const dateKindDeref = ptr + 4; + structObj.dateKind = diplomatRuntime.readOption(wasm, dateKindDeref, 4, (wasm, offset) => { const deref = diplomatRuntime.enumDiscriminant(wasm, offset); return new AnyCalendarKind(diplomatRuntime.internalConstructor, deref) }); + + return new DateTimeMismatchedCalendarError(structObj); + } + + constructor(structObj) { + return this.#internalConstructor(...arguments) + } +} \ No newline at end of file diff --git a/ffi/capi/bindings/js/GregorianDateTimeFormatter.d.ts b/ffi/capi/bindings/js/GregorianDateTimeFormatter.d.ts deleted file mode 100644 index 4bb0927a6b1..00000000000 --- a/ffi/capi/bindings/js/GregorianDateTimeFormatter.d.ts +++ /dev/null @@ -1,29 +0,0 @@ -// generated by diplomat-tool -import type { DataProvider } from "./DataProvider" -import type { DateTimeFormatterLoadError } from "./DateTimeFormatterLoadError" -import type { DateTimeLength } from "./DateTimeLength" -import type { IsoDate } from "./IsoDate" -import type { Locale } from "./Locale" -import type { Time } from "./Time" -import type { pointer, codepoint } from "./diplomat-runtime.d.ts"; - - -/** An ICU4X FixedCalendarDateTimeFormatter object capable of formatting an [`IsoDate`] and a [`Time`] as a string, -*using the Gregorian Calendar. -* -*See the [Rust documentation for `FixedCalendarDateTimeFormatter`](https://docs.rs/icu/latest/icu/datetime/struct.FixedCalendarDateTimeFormatter.html) for more information. -* -*Additional information: [1](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.YMDT.html) -*/ - - -export class GregorianDateTimeFormatter { - - get ffiValue(): pointer; - - static createWithLength(locale: Locale, length: DateTimeLength): GregorianDateTimeFormatter; - - static createWithLengthAndProvider(provider: DataProvider, locale: Locale, length: DateTimeLength): GregorianDateTimeFormatter; - - formatIso(date: IsoDate, time: Time): string; -} \ No newline at end of file diff --git a/ffi/capi/bindings/js/GregorianDateTimeFormatter.mjs b/ffi/capi/bindings/js/GregorianDateTimeFormatter.mjs deleted file mode 100644 index 3b356472fcf..00000000000 --- a/ffi/capi/bindings/js/GregorianDateTimeFormatter.mjs +++ /dev/null @@ -1,104 +0,0 @@ -// generated by diplomat-tool -import { DataProvider } from "./DataProvider.mjs" -import { DateTimeFormatterLoadError } from "./DateTimeFormatterLoadError.mjs" -import { DateTimeLength } from "./DateTimeLength.mjs" -import { IsoDate } from "./IsoDate.mjs" -import { Locale } from "./Locale.mjs" -import { Time } from "./Time.mjs" -import wasm from "./diplomat-wasm.mjs"; -import * as diplomatRuntime from "./diplomat-runtime.mjs"; - - -/** An ICU4X FixedCalendarDateTimeFormatter object capable of formatting an [`IsoDate`] and a [`Time`] as a string, -*using the Gregorian Calendar. -* -*See the [Rust documentation for `FixedCalendarDateTimeFormatter`](https://docs.rs/icu/latest/icu/datetime/struct.FixedCalendarDateTimeFormatter.html) for more information. -* -*Additional information: [1](https://docs.rs/icu/latest/icu/datetime/fieldsets/struct.YMDT.html) -*/ -const GregorianDateTimeFormatter_box_destroy_registry = new FinalizationRegistry((ptr) => { - wasm.icu4x_GregorianDateTimeFormatter_destroy_mv1(ptr); -}); - -export class GregorianDateTimeFormatter { - - // Internal ptr reference: - #ptr = null; - - // Lifetimes are only to keep dependencies alive. - // Since JS won't garbage collect until there are no incoming edges. - #selfEdge = []; - - #internalConstructor(symbol, ptr, selfEdge) { - if (symbol !== diplomatRuntime.internalConstructor) { - console.error("GregorianDateTimeFormatter is an Opaque type. You cannot call its constructor."); - return; - } - - this.#ptr = ptr; - this.#selfEdge = selfEdge; - - // Are we being borrowed? If not, we can register. - if (this.#selfEdge.length === 0) { - GregorianDateTimeFormatter_box_destroy_registry.register(this, this.#ptr); - } - - return this; - } - get ffiValue() { - return this.#ptr; - } - - static createWithLength(locale, length) { - const diplomatReceive = new diplomatRuntime.DiplomatReceiveBuf(wasm, 5, 4, true); - - const result = wasm.icu4x_GregorianDateTimeFormatter_create_with_length_mv1(diplomatReceive.buffer, locale.ffiValue, length.ffiValue); - - try { - if (!diplomatReceive.resultFlag) { - const cause = new DateTimeFormatterLoadError(diplomatRuntime.internalConstructor, diplomatRuntime.enumDiscriminant(wasm, diplomatReceive.buffer)); - throw new globalThis.Error('DateTimeFormatterLoadError: ' + cause.value, { cause }); - } - return new GregorianDateTimeFormatter(diplomatRuntime.internalConstructor, diplomatRuntime.ptrRead(wasm, diplomatReceive.buffer), []); - } - - finally { - diplomatReceive.free(); - } - } - - static createWithLengthAndProvider(provider, locale, length) { - const diplomatReceive = new diplomatRuntime.DiplomatReceiveBuf(wasm, 5, 4, true); - - const result = wasm.icu4x_GregorianDateTimeFormatter_create_with_length_and_provider_mv1(diplomatReceive.buffer, provider.ffiValue, locale.ffiValue, length.ffiValue); - - try { - if (!diplomatReceive.resultFlag) { - const cause = new DateTimeFormatterLoadError(diplomatRuntime.internalConstructor, diplomatRuntime.enumDiscriminant(wasm, diplomatReceive.buffer)); - throw new globalThis.Error('DateTimeFormatterLoadError: ' + cause.value, { cause }); - } - return new GregorianDateTimeFormatter(diplomatRuntime.internalConstructor, diplomatRuntime.ptrRead(wasm, diplomatReceive.buffer), []); - } - - finally { - diplomatReceive.free(); - } - } - - formatIso(date, time) { - const write = new diplomatRuntime.DiplomatWriteBuf(wasm); - wasm.icu4x_GregorianDateTimeFormatter_format_iso_mv1(this.ffiValue, date.ffiValue, time.ffiValue, write.buffer); - - try { - return write.readString8(); - } - - finally { - write.free(); - } - } - - constructor(symbol, ptr, selfEdge) { - return this.#internalConstructor(...arguments) - } -} \ No newline at end of file diff --git a/ffi/capi/bindings/js/TimePrecision.d.ts b/ffi/capi/bindings/js/TimePrecision.d.ts new file mode 100644 index 00000000000..11792dc1429 --- /dev/null +++ b/ffi/capi/bindings/js/TimePrecision.d.ts @@ -0,0 +1,33 @@ +// generated by diplomat-tool +import type { pointer, codepoint } from "./diplomat-runtime.d.ts"; + + +/** See the [Rust documentation for `TimePrecision`](https://docs.rs/icu/latest/icu/datetime/enum.TimePrecision.html) for more information. +*/ + + +export class TimePrecision { + + + static fromValue(value : TimePrecision | string) : TimePrecision; + + get value() : string; + + get ffiValue() : number; + + static Hour : TimePrecision; + static Minute : TimePrecision; + static MinuteOptional : TimePrecision; + static Second : TimePrecision; + static SecondF1 : TimePrecision; + static SecondF2 : TimePrecision; + static SecondF3 : TimePrecision; + static SecondF4 : TimePrecision; + static SecondF5 : TimePrecision; + static SecondF6 : TimePrecision; + static SecondF7 : TimePrecision; + static SecondF8 : TimePrecision; + static SecondF9 : TimePrecision; + + constructor(value: TimePrecision | string ); +} \ No newline at end of file diff --git a/ffi/capi/bindings/js/TimePrecision.mjs b/ffi/capi/bindings/js/TimePrecision.mjs new file mode 100644 index 00000000000..6d6e7418e48 --- /dev/null +++ b/ffi/capi/bindings/js/TimePrecision.mjs @@ -0,0 +1,103 @@ +// generated by diplomat-tool +import wasm from "./diplomat-wasm.mjs"; +import * as diplomatRuntime from "./diplomat-runtime.mjs"; + + +/** See the [Rust documentation for `TimePrecision`](https://docs.rs/icu/latest/icu/datetime/enum.TimePrecision.html) for more information. +*/ + + +export class TimePrecision { + + #value = undefined; + + static #values = new Map([ + ["Hour", 0], + ["Minute", 1], + ["MinuteOptional", 2], + ["Second", 3], + ["SecondF1", 4], + ["SecondF2", 5], + ["SecondF3", 6], + ["SecondF4", 7], + ["SecondF5", 8], + ["SecondF6", 9], + ["SecondF7", 10], + ["SecondF8", 11], + ["SecondF9", 12] + ]); + + static getAllEntries() { + return TimePrecision.#values.entries(); + } + + #internalConstructor(value) { + if (arguments.length > 1 && arguments[0] === diplomatRuntime.internalConstructor) { + // We pass in two internalConstructor arguments to create *new* + // instances of this type, otherwise the enums are treated as singletons. + if (arguments[1] === diplomatRuntime.internalConstructor ) { + this.#value = arguments[2]; + return this; + } + return TimePrecision.#objectValues[arguments[1]]; + } + + if (value instanceof TimePrecision) { + return value; + } + + let intVal = TimePrecision.#values.get(value); + + // Nullish check, checks for null or undefined + if (intVal != null) { + return TimePrecision.#objectValues[intVal]; + } + + throw TypeError(value + " is not a TimePrecision and does not correspond to any of its enumerator values."); + } + + static fromValue(value) { + return new TimePrecision(value); + } + + get value() { + return [...TimePrecision.#values.keys()][this.#value]; + } + + get ffiValue() { + return this.#value; + } + static #objectValues = [ + new TimePrecision(diplomatRuntime.internalConstructor, diplomatRuntime.internalConstructor, 0), + new TimePrecision(diplomatRuntime.internalConstructor, diplomatRuntime.internalConstructor, 1), + new TimePrecision(diplomatRuntime.internalConstructor, diplomatRuntime.internalConstructor, 2), + new TimePrecision(diplomatRuntime.internalConstructor, diplomatRuntime.internalConstructor, 3), + new TimePrecision(diplomatRuntime.internalConstructor, diplomatRuntime.internalConstructor, 4), + new TimePrecision(diplomatRuntime.internalConstructor, diplomatRuntime.internalConstructor, 5), + new TimePrecision(diplomatRuntime.internalConstructor, diplomatRuntime.internalConstructor, 6), + new TimePrecision(diplomatRuntime.internalConstructor, diplomatRuntime.internalConstructor, 7), + new TimePrecision(diplomatRuntime.internalConstructor, diplomatRuntime.internalConstructor, 8), + new TimePrecision(diplomatRuntime.internalConstructor, diplomatRuntime.internalConstructor, 9), + new TimePrecision(diplomatRuntime.internalConstructor, diplomatRuntime.internalConstructor, 10), + new TimePrecision(diplomatRuntime.internalConstructor, diplomatRuntime.internalConstructor, 11), + new TimePrecision(diplomatRuntime.internalConstructor, diplomatRuntime.internalConstructor, 12), + ]; + + static Hour = TimePrecision.#objectValues[0]; + static Minute = TimePrecision.#objectValues[1]; + static MinuteOptional = TimePrecision.#objectValues[2]; + static Second = TimePrecision.#objectValues[3]; + static SecondF1 = TimePrecision.#objectValues[4]; + static SecondF2 = TimePrecision.#objectValues[5]; + static SecondF3 = TimePrecision.#objectValues[6]; + static SecondF4 = TimePrecision.#objectValues[7]; + static SecondF5 = TimePrecision.#objectValues[8]; + static SecondF6 = TimePrecision.#objectValues[9]; + static SecondF7 = TimePrecision.#objectValues[10]; + static SecondF8 = TimePrecision.#objectValues[11]; + static SecondF9 = TimePrecision.#objectValues[12]; + + constructor(value) { + return this.#internalConstructor(...arguments) + } +} \ No newline at end of file diff --git a/ffi/capi/bindings/js/YearStyle.d.ts b/ffi/capi/bindings/js/YearStyle.d.ts new file mode 100644 index 00000000000..f7c8813314c --- /dev/null +++ b/ffi/capi/bindings/js/YearStyle.d.ts @@ -0,0 +1,23 @@ +// generated by diplomat-tool +import type { pointer, codepoint } from "./diplomat-runtime.d.ts"; + + +/** See the [Rust documentation for `YearStyle`](https://docs.rs/icu/latest/icu/datetime/enum.YearStyle.html) for more information. +*/ + + +export class YearStyle { + + + static fromValue(value : YearStyle | string) : YearStyle; + + get value() : string; + + get ffiValue() : number; + + static Auto : YearStyle; + static Full : YearStyle; + static WithEra : YearStyle; + + constructor(value: YearStyle | string ); +} \ No newline at end of file diff --git a/ffi/capi/bindings/js/YearStyle.mjs b/ffi/capi/bindings/js/YearStyle.mjs new file mode 100644 index 00000000000..d2786b865c6 --- /dev/null +++ b/ffi/capi/bindings/js/YearStyle.mjs @@ -0,0 +1,73 @@ +// generated by diplomat-tool +import wasm from "./diplomat-wasm.mjs"; +import * as diplomatRuntime from "./diplomat-runtime.mjs"; + + +/** See the [Rust documentation for `YearStyle`](https://docs.rs/icu/latest/icu/datetime/enum.YearStyle.html) for more information. +*/ + + +export class YearStyle { + + #value = undefined; + + static #values = new Map([ + ["Auto", 0], + ["Full", 1], + ["WithEra", 2] + ]); + + static getAllEntries() { + return YearStyle.#values.entries(); + } + + #internalConstructor(value) { + if (arguments.length > 1 && arguments[0] === diplomatRuntime.internalConstructor) { + // We pass in two internalConstructor arguments to create *new* + // instances of this type, otherwise the enums are treated as singletons. + if (arguments[1] === diplomatRuntime.internalConstructor ) { + this.#value = arguments[2]; + return this; + } + return YearStyle.#objectValues[arguments[1]]; + } + + if (value instanceof YearStyle) { + return value; + } + + let intVal = YearStyle.#values.get(value); + + // Nullish check, checks for null or undefined + if (intVal != null) { + return YearStyle.#objectValues[intVal]; + } + + throw TypeError(value + " is not a YearStyle and does not correspond to any of its enumerator values."); + } + + static fromValue(value) { + return new YearStyle(value); + } + + get value() { + return [...YearStyle.#values.keys()][this.#value]; + } + + get ffiValue() { + return this.#value; + } + static #objectValues = [ + new YearStyle(diplomatRuntime.internalConstructor, diplomatRuntime.internalConstructor, 0), + new YearStyle(diplomatRuntime.internalConstructor, diplomatRuntime.internalConstructor, 1), + new YearStyle(diplomatRuntime.internalConstructor, diplomatRuntime.internalConstructor, 2), + ]; + + static Auto = YearStyle.#objectValues[0]; + static Full = YearStyle.#objectValues[1]; + static WithEra = YearStyle.#objectValues[2]; + + constructor(value) { + return this.#internalConstructor(...arguments) + } +} \ No newline at end of file diff --git a/ffi/capi/bindings/js/index.d.ts b/ffi/capi/bindings/js/index.d.ts index d1ad5e64e88..a898572498c 100644 --- a/ffi/capi/bindings/js/index.d.ts +++ b/ffi/capi/bindings/js/index.d.ts @@ -8,6 +8,8 @@ export { CollatorOptions } from "./CollatorOptions" export { DisplayNamesOptions } from "./DisplayNamesOptions" +export { DateTimeMismatchedCalendarError } from "./DateTimeMismatchedCalendarError" + export { FixedDecimalLimitError } from "./FixedDecimalLimitError" export { TimeZoneInvalidOffsetError } from "./TimeZoneInvalidOffsetError" @@ -64,12 +66,8 @@ export { IsoDate } from "./IsoDate" export { DateFormatter } from "./DateFormatter" -export { DateTimeFormatter } from "./DateTimeFormatter" - export { GregorianDateFormatter } from "./GregorianDateFormatter" -export { GregorianDateTimeFormatter } from "./GregorianDateTimeFormatter" - export { TimeFormatter } from "./TimeFormatter" export { DecimalFormatter } from "./DecimalFormatter" @@ -100,6 +98,10 @@ export { LocaleDirectionality } from "./LocaleDirectionality" export { Logger } from "./Logger" +export { DateTimeFormatter } from "./DateTimeFormatter" + +export { DateTimeFormatterGregorian } from "./DateTimeFormatterGregorian" + export { ComposingNormalizer } from "./ComposingNormalizer" export { DecomposingNormalizer } from "./DecomposingNormalizer" @@ -256,6 +258,12 @@ export { TransformResult } from "./TransformResult" export { LocaleDirection } from "./LocaleDirection" +export { DateTimeAlignment } from "./DateTimeAlignment" + +export { TimePrecision } from "./TimePrecision" + +export { YearStyle } from "./YearStyle" + export { PluralCategory } from "./PluralCategory" export { BidiClass } from "./BidiClass" diff --git a/ffi/capi/bindings/js/index.mjs b/ffi/capi/bindings/js/index.mjs index 0f7e4a77f9c..b1d14d8c6e1 100644 --- a/ffi/capi/bindings/js/index.mjs +++ b/ffi/capi/bindings/js/index.mjs @@ -6,6 +6,8 @@ export { CollatorOptions } from "./CollatorOptions.mjs" export { DisplayNamesOptions } from "./DisplayNamesOptions.mjs" +export { DateTimeMismatchedCalendarError } from "./DateTimeMismatchedCalendarError.mjs" + export { FixedDecimalLimitError } from "./FixedDecimalLimitError.mjs" export { TimeZoneInvalidOffsetError } from "./TimeZoneInvalidOffsetError.mjs" @@ -62,12 +64,8 @@ export { IsoDate } from "./IsoDate.mjs" export { DateFormatter } from "./DateFormatter.mjs" -export { DateTimeFormatter } from "./DateTimeFormatter.mjs" - export { GregorianDateFormatter } from "./GregorianDateFormatter.mjs" -export { GregorianDateTimeFormatter } from "./GregorianDateTimeFormatter.mjs" - export { TimeFormatter } from "./TimeFormatter.mjs" export { DecimalFormatter } from "./DecimalFormatter.mjs" @@ -98,6 +96,10 @@ export { LocaleDirectionality } from "./LocaleDirectionality.mjs" export { Logger } from "./Logger.mjs" +export { DateTimeFormatter } from "./DateTimeFormatter.mjs" + +export { DateTimeFormatterGregorian } from "./DateTimeFormatterGregorian.mjs" + export { ComposingNormalizer } from "./ComposingNormalizer.mjs" export { DecomposingNormalizer } from "./DecomposingNormalizer.mjs" @@ -254,6 +256,12 @@ export { TransformResult } from "./TransformResult.mjs" export { LocaleDirection } from "./LocaleDirection.mjs" +export { DateTimeAlignment } from "./DateTimeAlignment.mjs" + +export { TimePrecision } from "./TimePrecision.mjs" + +export { YearStyle } from "./YearStyle.mjs" + export { PluralCategory } from "./PluralCategory.mjs" export { BidiClass } from "./BidiClass.mjs" diff --git a/ffi/capi/src/datetime_formatter.rs b/ffi/capi/src/datetime_formatter.rs index 16f43a3516d..807c9bebe3d 100644 --- a/ffi/capi/src/datetime_formatter.rs +++ b/ffi/capi/src/datetime_formatter.rs @@ -8,7 +8,7 @@ pub mod ffi { use alloc::boxed::Box; use alloc::sync::Arc; - use icu_datetime::fieldsets::{T, YMD, YMDT}; + use icu_datetime::fieldsets::{T, YMD}; #[cfg(any(feature = "compiled_data", feature = "buffer_provider"))] use icu_datetime::options::Length; @@ -145,71 +145,6 @@ pub mod ffi { } } - #[diplomat::opaque] - /// An ICU4X FixedCalendarDateTimeFormatter object capable of formatting an [`IsoDate`] and a [`Time`] as a string, - /// using the Gregorian Calendar. - #[diplomat::rust_link(icu::datetime::FixedCalendarDateTimeFormatter, Struct)] - #[diplomat::rust_link(icu::datetime::fieldsets::YMDT, Struct, compact)] - pub struct GregorianDateTimeFormatter( - pub icu_datetime::FixedCalendarDateTimeFormatter, - ); - - impl GregorianDateTimeFormatter { - /// Creates a new [`GregorianDateTimeFormatter`] using compiled data. - #[diplomat::attr(all(supports = fallible_constructors, supports = named_constructors), named_constructor = "with_length")] - #[diplomat::demo(default_constructor)] - #[cfg(feature = "compiled_data")] - #[diplomat::rust_link(icu::datetime::FixedCalendarDateTimeFormatter::try_new, FnInStruct)] - pub fn create_with_length( - locale: &Locale, - length: DateTimeLength, - ) -> Result, DateTimeFormatterLoadError> { - let prefs = (&locale.0).into(); - let options = YMDT::with_length(Length::from(length)).hm(); - - Ok(Box::new(GregorianDateTimeFormatter( - icu_datetime::FixedCalendarDateTimeFormatter::try_new(prefs, options)?, - ))) - } - - /// Creates a new [`GregorianDateTimeFormatter`] using a particular data source. - #[diplomat::attr(all(supports = fallible_constructors, supports = named_constructors), named_constructor = "with_length_and_provider")] - #[cfg(feature = "buffer_provider")] - #[diplomat::rust_link(icu::datetime::FixedCalendarDateTimeFormatter::try_new, FnInStruct)] - pub fn create_with_length_and_provider( - provider: &DataProvider, - locale: &Locale, - length: DateTimeLength, - ) -> Result, DateTimeFormatterLoadError> { - let prefs = (&locale.0).into(); - let options = YMDT::with_length(Length::from(length)).hm(); - - Ok(Box::new(GregorianDateTimeFormatter( - icu_datetime::FixedCalendarDateTimeFormatter::try_new_with_buffer_provider( - provider.get()?, - prefs, - options, - )?, - ))) - } - - /// Formats an [`IsoDate`] and a [`Time`] to a string. - #[diplomat::rust_link(icu::datetime::FixedCalendarDateTimeFormatter::format, FnInStruct)] - #[diplomat::rust_link(icu::datetime::FormattedDateTime, Struct, hidden)] - pub fn format_iso( - &self, - date: &IsoDate, - time: &Time, - write: &mut diplomat_runtime::DiplomatWrite, - ) { - let greg = icu_timezone::DateTime { - date: icu_calendar::Date::new_from_iso(date.0, icu_calendar::Gregorian), - time: time.0, - }; - let _infallible = self.0.format(&greg).write_to(write); - } - } - #[diplomat::opaque] /// An ICU4X DateFormatter object capable of formatting a [`Date`] as a string, /// using some calendar specified at runtime in the locale. @@ -289,97 +224,4 @@ pub mod ffi { Box::new(Calendar(Arc::new(self.0.calendar().0.clone()))) } } - - #[diplomat::opaque] - /// An ICU4X DateFormatter object capable of formatting a [`Date`] and a [`Time`] as a string, - /// using some calendar specified at runtime in the locale. - #[diplomat::rust_link(icu::datetime::DateTimeFormatter, Struct)] - #[diplomat::rust_link(icu::datetime::fieldsets::YMDT, Struct, compact)] - pub struct DateTimeFormatter(pub icu_datetime::DateTimeFormatter); - - impl DateTimeFormatter { - /// Creates a new [`DateTimeFormatter`] using compiled data. - #[diplomat::attr(all(supports = fallible_constructors, supports = named_constructors), named_constructor = "with_length")] - #[diplomat::demo(default_constructor)] - #[cfg(feature = "compiled_data")] - #[diplomat::rust_link(icu::datetime::DateTimeFormatter::try_new, FnInStruct)] - pub fn create_with_length( - locale: &Locale, - length: DateTimeLength, - ) -> Result, DateTimeFormatterLoadError> { - let prefs = (&locale.0).into(); - let options = YMDT::with_length(Length::from(length)).hm(); - - Ok(Box::new(DateTimeFormatter( - icu_datetime::DateTimeFormatter::try_new(prefs, options)?, - ))) - } - - /// Creates a new [`DateTimeFormatter`] using a particular data source. - #[diplomat::attr(all(supports = fallible_constructors, supports = named_constructors), named_constructor = "with_length_and_provider")] - #[cfg(feature = "buffer_provider")] - #[diplomat::rust_link(icu::datetime::DateTimeFormatter::try_new, FnInStruct)] - pub fn create_with_length_and_provider( - provider: &DataProvider, - locale: &Locale, - length: DateTimeLength, - ) -> Result, DateTimeFormatterLoadError> { - let prefs = (&locale.0).into(); - let options = YMDT::with_length(Length::from(length)).hm(); - - Ok(Box::new(DateTimeFormatter( - icu_datetime::DateTimeFormatter::try_new_with_buffer_provider( - provider.get()?, - prefs, - options, - )?, - ))) - } - - /// Formats a [`Date`] and a [`Time`] to a string. - #[diplomat::rust_link(icu::datetime::DateTimeFormatter::format, FnInStruct)] - #[diplomat::rust_link(icu::datetime::FormattedDateTime, Struct, hidden)] - pub fn format( - &self, - date: &Date, - time: &Time, - write: &mut diplomat_runtime::DiplomatWrite, - ) -> Result<(), DateTimeFormatError> { - let _infallible = self - .0 - .format(&icu_timezone::DateTime { - date: date.0.wrap_calendar_in_ref(), - time: time.0, - }) - .write_to(write); - Ok(()) - } - - /// Formats an [`IsoDate`] and a [`Time`] to a string. - /// - /// Will convert to this formatter's calendar first - #[diplomat::rust_link(icu::datetime::DateTimeFormatter::format, FnInStruct)] - #[diplomat::rust_link(icu::datetime::FormattedDateTime, Struct, hidden)] - pub fn format_iso( - &self, - date: &IsoDate, - time: &Time, - write: &mut diplomat_runtime::DiplomatWrite, - ) -> Result<(), DateTimeFormatError> { - let _infallible = self - .0 - .format(&icu_timezone::DateTime { - date: date.0, - time: time.0, - }) - .write_to(write); - Ok(()) - } - - /// Returns the calendar system used in this formatter. - #[diplomat::rust_link(icu::datetime::DateTimeFormatter::calendar, FnInStruct)] - pub fn calendar(&self) -> Box { - Box::new(Calendar(Arc::new(self.0.calendar().0.clone()))) - } - } } diff --git a/ffi/capi/src/errors.rs b/ffi/capi/src/errors.rs index f1b3b7db535..c276b904393 100644 --- a/ffi/capi/src/errors.rs +++ b/ffi/capi/src/errors.rs @@ -8,6 +8,12 @@ use ffi::*; #[diplomat::abi_rename = "icu4x_{0}_mv1"] #[diplomat::attr(auto, namespace = "icu4x")] pub mod ffi { + #[cfg(feature = "datetime")] + use diplomat_runtime::DiplomatOption; + + #[cfg(feature = "datetime")] + use crate::calendar::ffi::AnyCalendarKind; + #[derive(Debug, PartialEq, Eq)] #[repr(C)] #[diplomat::rust_link(icu::provider::DataError, Struct, compact)] @@ -102,6 +108,13 @@ pub mod ffi { DataIo = 0x08, } + #[cfg(feature = "datetime")] + #[diplomat::rust_link(icu::datetime::MismatchedCalendarError, Struct)] + pub struct DateTimeMismatchedCalendarError { + pub this_kind: AnyCalendarKind, + pub date_kind: DiplomatOption, + } + // TODO: This type is currently never constructed, as all formatters perform lossy formatting. #[derive(Debug, PartialEq, Eq)] #[repr(C)] @@ -228,6 +241,16 @@ impl From for DateTimeFormatterLoadError { } } +#[cfg(feature = "datetime")] +impl From for ffi::DateTimeMismatchedCalendarError { + fn from(value: icu_datetime::MismatchedCalendarError) -> Self { + Self { + this_kind: value.this_kind.into(), + date_kind: value.date_kind.map(Into::into).into(), + } + } +} + #[cfg(feature = "datetime")] impl From for DateTimeFormatError { fn from(value: icu_datetime::DateTimeWriteError) -> Self { diff --git a/ffi/capi/src/lib.rs b/ffi/capi/src/lib.rs index 063bac8aaae..346ff7f7ee8 100644 --- a/ffi/capi/src/lib.rs +++ b/ffi/capi/src/lib.rs @@ -98,6 +98,8 @@ pub mod list; pub mod locale; #[cfg(feature = "locale")] pub mod locale_directionality; +#[cfg(feature = "datetime")] +pub mod neo_datetime; #[cfg(feature = "normalizer")] pub mod normalizer; #[cfg(feature = "normalizer")] diff --git a/ffi/capi/src/neo_datetime.rs b/ffi/capi/src/neo_datetime.rs new file mode 100644 index 00000000000..f1609d4b4fe --- /dev/null +++ b/ffi/capi/src/neo_datetime.rs @@ -0,0 +1,1055 @@ +// This file is part of ICU4X. For terms of use, please see the file +// called LICENSE at the top level of the ICU4X source tree +// (online at: https://github.com/unicode-org/icu4x/blob/main/LICENSE ). + +use icu_datetime::options::FractionalSecondDigits; + +#[diplomat::bridge] +#[diplomat::abi_rename = "icu4x_{0}_mv1"] +#[diplomat::attr(auto, namespace = "icu4x")] +pub mod ffi { + use alloc::boxed::Box; + use icu_calendar::Gregorian; + use icu_datetime::fieldsets::enums::CompositeDateTimeFieldSet; + use writeable::Writeable; + + use crate::{ + date::ffi::{Date, IsoDate}, + errors::ffi::DateTimeMismatchedCalendarError, + time::ffi::Time, + }; + + #[cfg(feature = "buffer_provider")] + use crate::provider::ffi::DataProvider; + #[cfg(any(feature = "compiled_data", feature = "buffer_provider"))] + use crate::{ + datetime_formatter::ffi::DateTimeLength, errors::ffi::DateTimeFormatterLoadError, + locale_core::ffi::Locale, neo_datetime::map_or_default, + }; + + #[diplomat::enum_convert(icu_datetime::options::Alignment, needs_wildcard)] + #[diplomat::rust_link(icu::datetime::Alignment, Enum)] + pub enum DateTimeAlignment { + Auto, + Column, + } + + #[diplomat::enum_convert(icu_datetime::options::YearStyle, needs_wildcard)] + #[diplomat::rust_link(icu::datetime::YearStyle, Enum)] + pub enum YearStyle { + Auto, + Full, + WithEra, + } + + #[diplomat::rust_link(icu::datetime::TimePrecision, Enum)] + pub enum TimePrecision { + Hour, + Minute, + MinuteOptional, + Second, + SecondF1, + SecondF2, + SecondF3, + SecondF4, + SecondF5, + SecondF6, + SecondF7, + SecondF8, + SecondF9, + } + + #[diplomat::opaque] + #[diplomat::rust_link(icu::datetime::DateTimeFormatter, Typedef)] + pub struct DateTimeFormatter(pub icu_datetime::DateTimeFormatter); + + impl DateTimeFormatter { + #[diplomat::attr(all(supports = fallible_constructors, supports = named_constructors), named_constructor = "dt")] + #[diplomat::rust_link(icu::datetime::fieldsets::DT, Struct)] + #[diplomat::rust_link(icu::datetime::fieldsets::DT::with_length, FnInStruct, compact)] + #[diplomat::rust_link( + icu::datetime::fieldsets::DT::with_time_precision, + FnInStruct, + compact + )] + #[diplomat::rust_link(icu::datetime::fieldsets::DT::with_alignment, FnInStruct, compact)] + #[diplomat::rust_link(icu::datetime::fieldsets::DT::short, FnInStruct, hidden)] + #[diplomat::rust_link(icu::datetime::fieldsets::DT::medium, FnInStruct, hidden)] + #[diplomat::rust_link(icu::datetime::fieldsets::DT::long, FnInStruct, hidden)] + #[diplomat::rust_link(icu::datetime::fieldsets::DT::hm, FnInStruct, hidden)] + #[cfg(feature = "compiled_data")] + pub fn create_dt( + locale: &Locale, + length: Option, + time_precision: Option, + alignment: Option, + ) -> Result, DateTimeFormatterLoadError> { + let prefs = (&locale.0).into(); + let options = icu_datetime::fieldsets::DT::with_length(map_or_default(length)) + .with_alignment(map_or_default(alignment)) + .with_time_precision(map_or_default(time_precision)); + Ok(Box::new(DateTimeFormatter( + icu_datetime::DateTimeFormatter::try_new(prefs, options)?.with_fset(), + ))) + } + + #[diplomat::attr(all(supports = fallible_constructors, supports = named_constructors), named_constructor = "dt_with_provider")] + #[diplomat::rust_link(icu::datetime::fieldsets::DT, Struct)] + #[diplomat::rust_link(icu::datetime::fieldsets::DT, Struct)] + #[diplomat::rust_link(icu::datetime::fieldsets::DT::with_length, FnInStruct, compact)] + #[diplomat::rust_link( + icu::datetime::fieldsets::DT::with_time_precision, + FnInStruct, + compact + )] + #[diplomat::rust_link(icu::datetime::fieldsets::DT::with_alignment, FnInStruct, compact)] + #[cfg(feature = "buffer_provider")] + pub fn create_dt_with_provider( + provider: &DataProvider, + locale: &Locale, + length: Option, + time_precision: Option, + alignment: Option, + ) -> Result, DateTimeFormatterLoadError> { + let prefs = (&locale.0).into(); + let options = icu_datetime::fieldsets::DT::with_length(map_or_default(length)) + .with_alignment(map_or_default(alignment)) + .with_time_precision(map_or_default(time_precision)); + Ok(Box::new(DateTimeFormatter( + icu_datetime::DateTimeFormatter::try_new_with_buffer_provider( + provider.get()?, + prefs, + options, + )? + .with_fset(), + ))) + } + + #[diplomat::attr(all(supports = fallible_constructors, supports = named_constructors), named_constructor = "mdt")] + #[diplomat::rust_link(icu::datetime::fieldsets::MDT, Struct)] + #[diplomat::rust_link(icu::datetime::fieldsets::MDT::with_length, FnInStruct, compact)] + #[diplomat::rust_link( + icu::datetime::fieldsets::MDT::with_time_precision, + FnInStruct, + compact + )] + #[diplomat::rust_link(icu::datetime::fieldsets::MDT::with_alignment, FnInStruct, compact)] + #[diplomat::rust_link(icu::datetime::fieldsets::MDT::short, FnInStruct, hidden)] + #[diplomat::rust_link(icu::datetime::fieldsets::MDT::medium, FnInStruct, hidden)] + #[diplomat::rust_link(icu::datetime::fieldsets::MDT::long, FnInStruct, hidden)] + #[diplomat::rust_link(icu::datetime::fieldsets::MDT::hm, FnInStruct, hidden)] + #[cfg(feature = "compiled_data")] + pub fn create_mdt( + locale: &Locale, + length: Option, + time_precision: Option, + alignment: Option, + ) -> Result, DateTimeFormatterLoadError> { + let prefs = (&locale.0).into(); + let options = icu_datetime::fieldsets::MDT::with_length(map_or_default(length)) + .with_alignment(map_or_default(alignment)) + .with_time_precision(map_or_default(time_precision)); + Ok(Box::new(DateTimeFormatter( + icu_datetime::DateTimeFormatter::try_new(prefs, options)?.with_fset(), + ))) + } + + #[diplomat::attr(all(supports = fallible_constructors, supports = named_constructors), named_constructor = "mdt_with_provider")] + #[diplomat::rust_link(icu::datetime::fieldsets::MDT, Struct)] + #[diplomat::rust_link(icu::datetime::fieldsets::MDT::with_length, FnInStruct, compact)] + #[diplomat::rust_link( + icu::datetime::fieldsets::MDT::with_time_precision, + FnInStruct, + compact + )] + #[diplomat::rust_link(icu::datetime::fieldsets::MDT::with_alignment, FnInStruct, compact)] + #[cfg(feature = "buffer_provider")] + pub fn create_mdt_with_provider( + provider: &DataProvider, + locale: &Locale, + length: Option, + time_precision: Option, + alignment: Option, + ) -> Result, DateTimeFormatterLoadError> { + let prefs = (&locale.0).into(); + let options = icu_datetime::fieldsets::MDT::with_length(map_or_default(length)) + .with_alignment(map_or_default(alignment)) + .with_time_precision(map_or_default(time_precision)); + Ok(Box::new(DateTimeFormatter( + icu_datetime::DateTimeFormatter::try_new_with_buffer_provider( + provider.get()?, + prefs, + options, + )? + .with_fset(), + ))) + } + + #[diplomat::attr(all(supports = fallible_constructors, supports = named_constructors), named_constructor = "ymdt")] + #[diplomat::rust_link(icu::datetime::fieldsets::YMDT, Struct)] + #[diplomat::rust_link(icu::datetime::fieldsets::YMDT::with_length, FnInStruct, compact)] + #[diplomat::rust_link( + icu::datetime::fieldsets::YMDT::with_time_precision, + FnInStruct, + compact + )] + #[diplomat::rust_link(icu::datetime::fieldsets::YMDT::with_alignment, FnInStruct, compact)] + #[diplomat::rust_link(icu::datetime::fieldsets::YMDT::with_year_style, FnInStruct, compact)] + #[diplomat::rust_link(icu::datetime::fieldsets::YMDT::short, FnInStruct, hidden)] + #[diplomat::rust_link(icu::datetime::fieldsets::YMDT::medium, FnInStruct, hidden)] + #[diplomat::rust_link(icu::datetime::fieldsets::YMDT::long, FnInStruct, hidden)] + #[diplomat::rust_link(icu::datetime::fieldsets::YMDT::hm, FnInStruct, hidden)] + #[diplomat::demo(default_constructor)] + #[cfg(feature = "compiled_data")] + pub fn create_ymdt( + locale: &Locale, + length: Option, + time_precision: Option, + alignment: Option, + year_style: Option, + ) -> Result, DateTimeFormatterLoadError> { + let prefs = (&locale.0).into(); + let options = icu_datetime::fieldsets::YMDT::with_length(map_or_default(length)) + .with_alignment(map_or_default(alignment)) + .with_time_precision(map_or_default(time_precision)) + .with_year_style(map_or_default(year_style)); + Ok(Box::new(DateTimeFormatter( + icu_datetime::DateTimeFormatter::try_new(prefs, options)?.with_fset(), + ))) + } + + #[diplomat::attr(all(supports = fallible_constructors, supports = named_constructors), named_constructor = "ymdt_with_provider")] + #[diplomat::rust_link(icu::datetime::fieldsets::YMDT, Struct)] + #[diplomat::rust_link(icu::datetime::fieldsets::YMDT::with_length, FnInStruct, compact)] + #[diplomat::rust_link( + icu::datetime::fieldsets::YMDT::with_time_precision, + FnInStruct, + compact + )] + #[diplomat::rust_link(icu::datetime::fieldsets::YMDT::with_alignment, FnInStruct, compact)] + #[diplomat::rust_link(icu::datetime::fieldsets::YMDT::with_year_style, FnInStruct, compact)] + #[cfg(feature = "buffer_provider")] + pub fn create_ymdt_with_provider( + provider: &DataProvider, + locale: &Locale, + length: Option, + time_precision: Option, + alignment: Option, + year_style: Option, + ) -> Result, DateTimeFormatterLoadError> { + let prefs = (&locale.0).into(); + let options = icu_datetime::fieldsets::YMDT::with_length(map_or_default(length)) + .with_alignment(map_or_default(alignment)) + .with_time_precision(map_or_default(time_precision)) + .with_year_style(map_or_default(year_style)); + Ok(Box::new(DateTimeFormatter( + icu_datetime::DateTimeFormatter::try_new_with_buffer_provider( + provider.get()?, + prefs, + options, + )? + .with_fset(), + ))) + } + + #[diplomat::attr(all(supports = fallible_constructors, supports = named_constructors), named_constructor = "det")] + #[diplomat::rust_link(icu::datetime::fieldsets::DET, Struct)] + #[diplomat::rust_link(icu::datetime::fieldsets::DET::with_length, FnInStruct, compact)] + #[diplomat::rust_link( + icu::datetime::fieldsets::DET::with_time_precision, + FnInStruct, + compact + )] + #[diplomat::rust_link(icu::datetime::fieldsets::DET::with_alignment, FnInStruct, compact)] + #[diplomat::rust_link(icu::datetime::fieldsets::DET::short, FnInStruct, hidden)] + #[diplomat::rust_link(icu::datetime::fieldsets::DET::medium, FnInStruct, hidden)] + #[diplomat::rust_link(icu::datetime::fieldsets::DET::long, FnInStruct, hidden)] + #[diplomat::rust_link(icu::datetime::fieldsets::DET::hm, FnInStruct, hidden)] + #[cfg(feature = "compiled_data")] + pub fn create_det( + locale: &Locale, + length: Option, + time_precision: Option, + alignment: Option, + ) -> Result, DateTimeFormatterLoadError> { + let prefs = (&locale.0).into(); + let options = icu_datetime::fieldsets::DET::with_length(map_or_default(length)) + .with_alignment(map_or_default(alignment)) + .with_time_precision(map_or_default(time_precision)); + Ok(Box::new(DateTimeFormatter( + icu_datetime::DateTimeFormatter::try_new(prefs, options)?.with_fset(), + ))) + } + + #[diplomat::attr(all(supports = fallible_constructors, supports = named_constructors), named_constructor = "det_with_provider")] + #[diplomat::rust_link(icu::datetime::fieldsets::DET, Struct)] + #[diplomat::rust_link(icu::datetime::fieldsets::DET::with_length, FnInStruct, compact)] + #[diplomat::rust_link( + icu::datetime::fieldsets::DET::with_time_precision, + FnInStruct, + compact + )] + #[diplomat::rust_link(icu::datetime::fieldsets::DET::with_alignment, FnInStruct, compact)] + #[cfg(feature = "buffer_provider")] + pub fn create_det_with_provider( + provider: &DataProvider, + locale: &Locale, + length: Option, + time_precision: Option, + alignment: Option, + ) -> Result, DateTimeFormatterLoadError> { + let prefs = (&locale.0).into(); + let options = icu_datetime::fieldsets::DET::with_length(map_or_default(length)) + .with_alignment(map_or_default(alignment)) + .with_time_precision(map_or_default(time_precision)); + Ok(Box::new(DateTimeFormatter( + icu_datetime::DateTimeFormatter::try_new_with_buffer_provider( + provider.get()?, + prefs, + options, + )? + .with_fset(), + ))) + } + + #[diplomat::attr(all(supports = fallible_constructors, supports = named_constructors), named_constructor = "mdet")] + #[diplomat::rust_link(icu::datetime::fieldsets::MDET, Struct)] + #[diplomat::rust_link(icu::datetime::fieldsets::MDET::with_length, FnInStruct, compact)] + #[diplomat::rust_link( + icu::datetime::fieldsets::MDET::with_time_precision, + FnInStruct, + compact + )] + #[diplomat::rust_link(icu::datetime::fieldsets::MDET::with_alignment, FnInStruct, compact)] + #[diplomat::rust_link(icu::datetime::fieldsets::MDET::short, FnInStruct, hidden)] + #[diplomat::rust_link(icu::datetime::fieldsets::MDET::medium, FnInStruct, hidden)] + #[diplomat::rust_link(icu::datetime::fieldsets::MDET::long, FnInStruct, hidden)] + #[diplomat::rust_link(icu::datetime::fieldsets::MDET::hm, FnInStruct, hidden)] + #[cfg(feature = "compiled_data")] + pub fn create_mdet( + locale: &Locale, + length: Option, + time_precision: Option, + alignment: Option, + ) -> Result, DateTimeFormatterLoadError> { + let prefs = (&locale.0).into(); + let options = icu_datetime::fieldsets::MDET::with_length(map_or_default(length)) + .with_alignment(map_or_default(alignment)) + .with_time_precision(map_or_default(time_precision)); + Ok(Box::new(DateTimeFormatter( + icu_datetime::DateTimeFormatter::try_new(prefs, options)?.with_fset(), + ))) + } + + #[diplomat::attr(all(supports = fallible_constructors, supports = named_constructors), named_constructor = "mdet_with_provider")] + #[diplomat::rust_link(icu::datetime::fieldsets::MDET, Struct)] + #[diplomat::rust_link(icu::datetime::fieldsets::MDET::with_length, FnInStruct, compact)] + #[diplomat::rust_link( + icu::datetime::fieldsets::MDET::with_time_precision, + FnInStruct, + compact + )] + #[diplomat::rust_link(icu::datetime::fieldsets::MDET::with_alignment, FnInStruct, compact)] + #[cfg(feature = "buffer_provider")] + pub fn create_mdet_with_provider( + provider: &DataProvider, + locale: &Locale, + length: Option, + time_precision: Option, + alignment: Option, + ) -> Result, DateTimeFormatterLoadError> { + let prefs = (&locale.0).into(); + let options = icu_datetime::fieldsets::MDET::with_length(map_or_default(length)) + .with_alignment(map_or_default(alignment)) + .with_time_precision(map_or_default(time_precision)); + Ok(Box::new(DateTimeFormatter( + icu_datetime::DateTimeFormatter::try_new_with_buffer_provider( + provider.get()?, + prefs, + options, + )? + .with_fset(), + ))) + } + + #[diplomat::attr(all(supports = fallible_constructors, supports = named_constructors), named_constructor = "ymdet")] + #[diplomat::rust_link(icu::datetime::fieldsets::YMDET, Struct)] + #[diplomat::rust_link(icu::datetime::fieldsets::YMDET::with_length, FnInStruct, compact)] + #[diplomat::rust_link( + icu::datetime::fieldsets::YMDET::with_time_precision, + FnInStruct, + compact + )] + #[diplomat::rust_link(icu::datetime::fieldsets::YMDET::with_alignment, FnInStruct, compact)] + #[diplomat::rust_link( + icu::datetime::fieldsets::YMDET::with_year_style, + FnInStruct, + compact + )] + #[diplomat::rust_link(icu::datetime::fieldsets::YMDET::short, FnInStruct, hidden)] + #[diplomat::rust_link(icu::datetime::fieldsets::YMDET::medium, FnInStruct, hidden)] + #[diplomat::rust_link(icu::datetime::fieldsets::YMDET::long, FnInStruct, hidden)] + #[diplomat::rust_link(icu::datetime::fieldsets::YMDET::hm, FnInStruct, hidden)] + #[cfg(feature = "compiled_data")] + pub fn create_ymdet( + locale: &Locale, + length: Option, + time_precision: Option, + alignment: Option, + year_style: Option, + ) -> Result, DateTimeFormatterLoadError> { + let prefs = (&locale.0).into(); + let options = icu_datetime::fieldsets::YMDET::with_length(map_or_default(length)) + .with_alignment(map_or_default(alignment)) + .with_time_precision(map_or_default(time_precision)) + .with_year_style(map_or_default(year_style)); + Ok(Box::new(DateTimeFormatter( + icu_datetime::DateTimeFormatter::try_new(prefs, options)?.with_fset(), + ))) + } + + #[diplomat::attr(all(supports = fallible_constructors, supports = named_constructors), named_constructor = "ymdet_with_provider")] + #[diplomat::rust_link(icu::datetime::fieldsets::YMDET, Struct)] + #[diplomat::rust_link(icu::datetime::fieldsets::YMDET::with_length, FnInStruct, compact)] + #[diplomat::rust_link( + icu::datetime::fieldsets::YMDET::with_time_precision, + FnInStruct, + compact + )] + #[diplomat::rust_link(icu::datetime::fieldsets::YMDET::with_alignment, FnInStruct, compact)] + #[diplomat::rust_link( + icu::datetime::fieldsets::YMDET::with_year_style, + FnInStruct, + compact + )] + #[cfg(feature = "buffer_provider")] + pub fn create_ymdet_with_provider( + provider: &DataProvider, + locale: &Locale, + length: Option, + time_precision: Option, + alignment: Option, + year_style: Option, + ) -> Result, DateTimeFormatterLoadError> { + let prefs = (&locale.0).into(); + let options = icu_datetime::fieldsets::YMDET::with_length(map_or_default(length)) + .with_alignment(map_or_default(alignment)) + .with_time_precision(map_or_default(time_precision)) + .with_year_style(map_or_default(year_style)); + Ok(Box::new(DateTimeFormatter( + icu_datetime::DateTimeFormatter::try_new_with_buffer_provider( + provider.get()?, + prefs, + options, + )? + .with_fset(), + ))) + } + + #[diplomat::attr(all(supports = fallible_constructors, supports = named_constructors), named_constructor = "et")] + #[diplomat::rust_link(icu::datetime::fieldsets::ET, Struct)] + #[diplomat::rust_link(icu::datetime::fieldsets::ET::with_length, FnInStruct, compact)] + #[diplomat::rust_link( + icu::datetime::fieldsets::ET::with_time_precision, + FnInStruct, + compact + )] + #[diplomat::rust_link(icu::datetime::fieldsets::ET::with_alignment, FnInStruct, compact)] + #[diplomat::rust_link(icu::datetime::fieldsets::ET::short, FnInStruct, hidden)] + #[diplomat::rust_link(icu::datetime::fieldsets::ET::medium, FnInStruct, hidden)] + #[diplomat::rust_link(icu::datetime::fieldsets::ET::long, FnInStruct, hidden)] + #[diplomat::rust_link(icu::datetime::fieldsets::ET::hm, FnInStruct, hidden)] + #[cfg(feature = "compiled_data")] + pub fn create_et( + locale: &Locale, + length: Option, + time_precision: Option, + alignment: Option, + ) -> Result, DateTimeFormatterLoadError> { + let prefs = (&locale.0).into(); + let options = icu_datetime::fieldsets::ET::with_length(map_or_default(length)) + .with_alignment(map_or_default(alignment)) + .with_time_precision(map_or_default(time_precision)); + Ok(Box::new(DateTimeFormatter( + icu_datetime::DateTimeFormatter::try_new(prefs, options)?.with_fset(), + ))) + } + + #[diplomat::attr(all(supports = fallible_constructors, supports = named_constructors), named_constructor = "et_with_provider")] + #[diplomat::rust_link(icu::datetime::fieldsets::ET, Struct)] + #[diplomat::rust_link(icu::datetime::fieldsets::ET::with_length, FnInStruct, compact)] + #[diplomat::rust_link( + icu::datetime::fieldsets::ET::with_time_precision, + FnInStruct, + compact + )] + #[diplomat::rust_link(icu::datetime::fieldsets::ET::with_alignment, FnInStruct, compact)] + #[cfg(feature = "buffer_provider")] + pub fn create_et_with_provider( + provider: &DataProvider, + locale: &Locale, + length: Option, + time_precision: Option, + alignment: Option, + ) -> Result, DateTimeFormatterLoadError> { + let prefs = (&locale.0).into(); + let options = icu_datetime::fieldsets::ET::with_length(map_or_default(length)) + .with_alignment(map_or_default(alignment)) + .with_time_precision(map_or_default(time_precision)); + Ok(Box::new(DateTimeFormatter( + icu_datetime::DateTimeFormatter::try_new_with_buffer_provider( + provider.get()?, + prefs, + options, + )? + .with_fset(), + ))) + } + + #[diplomat::rust_link(icu::datetime::DateTimeFormatter::format, FnInStruct)] + #[diplomat::rust_link(icu::datetime::FormattedDateTime, Struct, hidden)] + #[diplomat::rust_link(icu::datetime::FormattedDateTime::to_string, FnInStruct, hidden)] + pub fn format_iso( + &self, + date: &IsoDate, + time: &Time, + write: &mut diplomat_runtime::DiplomatWrite, + ) { + let value = icu_timezone::DateTime { + date: date.0, + time: time.0, + }; + let _infallible = self.0.format(&value).write_to(write); + } + + #[diplomat::rust_link(icu::datetime::DateTimeFormatter::format_same_calendar, FnInStruct)] + #[diplomat::rust_link(icu::datetime::FormattedDateTime, Struct, hidden)] + #[diplomat::rust_link(icu::datetime::FormattedDateTime::to_string, FnInStruct, hidden)] + pub fn format_same_calendar( + &self, + date: &Date, + time: &Time, + write: &mut diplomat_runtime::DiplomatWrite, + ) -> Result<(), DateTimeMismatchedCalendarError> { + let value = icu_timezone::DateTime { + date: date.0.wrap_calendar_in_ref(), + time: time.0, + }; + let _infallible = self.0.format_same_calendar(&value)?.write_to(write); + Ok(()) + } + } + + #[diplomat::opaque] + #[diplomat::rust_link(icu::datetime::FixedCalendarDateTimeFormatter, Typedef)] + pub struct DateTimeFormatterGregorian( + pub icu_datetime::FixedCalendarDateTimeFormatter, + ); + + impl DateTimeFormatterGregorian { + #[diplomat::attr(all(supports = fallible_constructors, supports = named_constructors), named_constructor = "dt")] + #[diplomat::rust_link(icu::datetime::fieldsets::DT, Struct)] + #[diplomat::rust_link(icu::datetime::fieldsets::DT::with_length, FnInStruct, compact)] + #[diplomat::rust_link( + icu::datetime::fieldsets::DT::with_time_precision, + FnInStruct, + compact + )] + #[diplomat::rust_link(icu::datetime::fieldsets::DT::with_alignment, FnInStruct, compact)] + #[diplomat::rust_link(icu::datetime::fieldsets::DT::short, FnInStruct, hidden)] + #[diplomat::rust_link(icu::datetime::fieldsets::DT::medium, FnInStruct, hidden)] + #[diplomat::rust_link(icu::datetime::fieldsets::DT::long, FnInStruct, hidden)] + #[diplomat::rust_link(icu::datetime::fieldsets::DT::hm, FnInStruct, hidden)] + #[cfg(feature = "compiled_data")] + pub fn create_dt( + locale: &Locale, + length: Option, + time_precision: Option, + alignment: Option, + ) -> Result, DateTimeFormatterLoadError> { + let prefs = (&locale.0).into(); + let options = icu_datetime::fieldsets::DT::with_length(map_or_default(length)) + .with_alignment(map_or_default(alignment)) + .with_time_precision(map_or_default(time_precision)); + Ok(Box::new(DateTimeFormatterGregorian( + icu_datetime::FixedCalendarDateTimeFormatter::try_new(prefs, options)?.with_fset(), + ))) + } + + #[diplomat::attr(all(supports = fallible_constructors, supports = named_constructors), named_constructor = "dt_with_provider")] + #[diplomat::rust_link(icu::datetime::fieldsets::DT, Struct)] + #[diplomat::rust_link(icu::datetime::fieldsets::DT, Struct)] + #[diplomat::rust_link(icu::datetime::fieldsets::DT::with_length, FnInStruct, compact)] + #[diplomat::rust_link( + icu::datetime::fieldsets::DT::with_time_precision, + FnInStruct, + compact + )] + #[diplomat::rust_link(icu::datetime::fieldsets::DT::with_alignment, FnInStruct, compact)] + #[cfg(feature = "buffer_provider")] + pub fn create_dt_with_provider( + provider: &DataProvider, + locale: &Locale, + length: Option, + time_precision: Option, + alignment: Option, + ) -> Result, DateTimeFormatterLoadError> { + let prefs = (&locale.0).into(); + let options = icu_datetime::fieldsets::DT::with_length(map_or_default(length)) + .with_alignment(map_or_default(alignment)) + .with_time_precision(map_or_default(time_precision)); + Ok(Box::new(DateTimeFormatterGregorian( + icu_datetime::FixedCalendarDateTimeFormatter::try_new_with_buffer_provider( + provider.get()?, + prefs, + options, + )? + .with_fset(), + ))) + } + + #[diplomat::attr(all(supports = fallible_constructors, supports = named_constructors), named_constructor = "mdt")] + #[diplomat::rust_link(icu::datetime::fieldsets::MDT, Struct)] + #[diplomat::rust_link(icu::datetime::fieldsets::MDT::with_length, FnInStruct, compact)] + #[diplomat::rust_link( + icu::datetime::fieldsets::MDT::with_time_precision, + FnInStruct, + compact + )] + #[diplomat::rust_link(icu::datetime::fieldsets::MDT::with_alignment, FnInStruct, compact)] + #[diplomat::rust_link(icu::datetime::fieldsets::MDT::short, FnInStruct, hidden)] + #[diplomat::rust_link(icu::datetime::fieldsets::MDT::medium, FnInStruct, hidden)] + #[diplomat::rust_link(icu::datetime::fieldsets::MDT::long, FnInStruct, hidden)] + #[diplomat::rust_link(icu::datetime::fieldsets::MDT::hm, FnInStruct, hidden)] + #[cfg(feature = "compiled_data")] + pub fn create_mdt( + locale: &Locale, + length: Option, + time_precision: Option, + alignment: Option, + ) -> Result, DateTimeFormatterLoadError> { + let prefs = (&locale.0).into(); + let options = icu_datetime::fieldsets::MDT::with_length(map_or_default(length)) + .with_alignment(map_or_default(alignment)) + .with_time_precision(map_or_default(time_precision)); + Ok(Box::new(DateTimeFormatterGregorian( + icu_datetime::FixedCalendarDateTimeFormatter::try_new(prefs, options)?.with_fset(), + ))) + } + + #[diplomat::attr(all(supports = fallible_constructors, supports = named_constructors), named_constructor = "mdt_with_provider")] + #[diplomat::rust_link(icu::datetime::fieldsets::MDT, Struct)] + #[diplomat::rust_link(icu::datetime::fieldsets::MDT::with_length, FnInStruct, compact)] + #[diplomat::rust_link( + icu::datetime::fieldsets::MDT::with_time_precision, + FnInStruct, + compact + )] + #[diplomat::rust_link(icu::datetime::fieldsets::MDT::with_alignment, FnInStruct, compact)] + #[cfg(feature = "buffer_provider")] + pub fn create_mdt_with_provider( + provider: &DataProvider, + locale: &Locale, + length: Option, + time_precision: Option, + alignment: Option, + ) -> Result, DateTimeFormatterLoadError> { + let prefs = (&locale.0).into(); + let options = icu_datetime::fieldsets::MDT::with_length(map_or_default(length)) + .with_alignment(map_or_default(alignment)) + .with_time_precision(map_or_default(time_precision)); + Ok(Box::new(DateTimeFormatterGregorian( + icu_datetime::FixedCalendarDateTimeFormatter::try_new_with_buffer_provider( + provider.get()?, + prefs, + options, + )? + .with_fset(), + ))) + } + + #[diplomat::attr(all(supports = fallible_constructors, supports = named_constructors), named_constructor = "ymdt")] + #[diplomat::rust_link(icu::datetime::fieldsets::YMDT, Struct)] + #[diplomat::rust_link(icu::datetime::fieldsets::YMDT::with_length, FnInStruct, compact)] + #[diplomat::rust_link( + icu::datetime::fieldsets::YMDT::with_time_precision, + FnInStruct, + compact + )] + #[diplomat::rust_link(icu::datetime::fieldsets::YMDT::with_alignment, FnInStruct, compact)] + #[diplomat::rust_link(icu::datetime::fieldsets::YMDT::with_year_style, FnInStruct, compact)] + #[diplomat::rust_link(icu::datetime::fieldsets::YMDT::short, FnInStruct, hidden)] + #[diplomat::rust_link(icu::datetime::fieldsets::YMDT::medium, FnInStruct, hidden)] + #[diplomat::rust_link(icu::datetime::fieldsets::YMDT::long, FnInStruct, hidden)] + #[diplomat::rust_link(icu::datetime::fieldsets::YMDT::hm, FnInStruct, hidden)] + #[diplomat::demo(default_constructor)] + #[cfg(feature = "compiled_data")] + pub fn create_ymdt( + locale: &Locale, + length: Option, + time_precision: Option, + alignment: Option, + year_style: Option, + ) -> Result, DateTimeFormatterLoadError> { + let prefs = (&locale.0).into(); + let options = icu_datetime::fieldsets::YMDT::with_length(map_or_default(length)) + .with_alignment(map_or_default(alignment)) + .with_time_precision(map_or_default(time_precision)) + .with_year_style(map_or_default(year_style)); + Ok(Box::new(DateTimeFormatterGregorian( + icu_datetime::FixedCalendarDateTimeFormatter::try_new(prefs, options)?.with_fset(), + ))) + } + + #[diplomat::attr(all(supports = fallible_constructors, supports = named_constructors), named_constructor = "ymdt_with_provider")] + #[diplomat::rust_link(icu::datetime::fieldsets::YMDT, Struct)] + #[diplomat::rust_link(icu::datetime::fieldsets::YMDT::with_length, FnInStruct, compact)] + #[diplomat::rust_link( + icu::datetime::fieldsets::YMDT::with_time_precision, + FnInStruct, + compact + )] + #[diplomat::rust_link(icu::datetime::fieldsets::YMDT::with_alignment, FnInStruct, compact)] + #[diplomat::rust_link(icu::datetime::fieldsets::YMDT::with_year_style, FnInStruct, compact)] + #[cfg(feature = "buffer_provider")] + pub fn create_ymdt_with_provider( + provider: &DataProvider, + locale: &Locale, + length: Option, + time_precision: Option, + alignment: Option, + year_style: Option, + ) -> Result, DateTimeFormatterLoadError> { + let prefs = (&locale.0).into(); + let options = icu_datetime::fieldsets::YMDT::with_length(map_or_default(length)) + .with_alignment(map_or_default(alignment)) + .with_time_precision(map_or_default(time_precision)) + .with_year_style(map_or_default(year_style)); + Ok(Box::new(DateTimeFormatterGregorian( + icu_datetime::FixedCalendarDateTimeFormatter::try_new_with_buffer_provider( + provider.get()?, + prefs, + options, + )? + .with_fset(), + ))) + } + + #[diplomat::attr(all(supports = fallible_constructors, supports = named_constructors), named_constructor = "det")] + #[diplomat::rust_link(icu::datetime::fieldsets::DET, Struct)] + #[diplomat::rust_link(icu::datetime::fieldsets::DET::with_length, FnInStruct, compact)] + #[diplomat::rust_link( + icu::datetime::fieldsets::DET::with_time_precision, + FnInStruct, + compact + )] + #[diplomat::rust_link(icu::datetime::fieldsets::DET::with_alignment, FnInStruct, compact)] + #[diplomat::rust_link(icu::datetime::fieldsets::DET::short, FnInStruct, hidden)] + #[diplomat::rust_link(icu::datetime::fieldsets::DET::medium, FnInStruct, hidden)] + #[diplomat::rust_link(icu::datetime::fieldsets::DET::long, FnInStruct, hidden)] + #[diplomat::rust_link(icu::datetime::fieldsets::DET::hm, FnInStruct, hidden)] + #[cfg(feature = "compiled_data")] + pub fn create_det( + locale: &Locale, + length: Option, + time_precision: Option, + alignment: Option, + ) -> Result, DateTimeFormatterLoadError> { + let prefs = (&locale.0).into(); + let options = icu_datetime::fieldsets::DET::with_length(map_or_default(length)) + .with_alignment(map_or_default(alignment)) + .with_time_precision(map_or_default(time_precision)); + Ok(Box::new(DateTimeFormatterGregorian( + icu_datetime::FixedCalendarDateTimeFormatter::try_new(prefs, options)?.with_fset(), + ))) + } + + #[diplomat::attr(all(supports = fallible_constructors, supports = named_constructors), named_constructor = "det_with_provider")] + #[diplomat::rust_link(icu::datetime::fieldsets::DET, Struct)] + #[diplomat::rust_link(icu::datetime::fieldsets::DET::with_length, FnInStruct, compact)] + #[diplomat::rust_link( + icu::datetime::fieldsets::DET::with_time_precision, + FnInStruct, + compact + )] + #[diplomat::rust_link(icu::datetime::fieldsets::DET::with_alignment, FnInStruct, compact)] + #[cfg(feature = "buffer_provider")] + pub fn create_det_with_provider( + provider: &DataProvider, + locale: &Locale, + length: Option, + time_precision: Option, + alignment: Option, + ) -> Result, DateTimeFormatterLoadError> { + let prefs = (&locale.0).into(); + let options = icu_datetime::fieldsets::DET::with_length(map_or_default(length)) + .with_alignment(map_or_default(alignment)) + .with_time_precision(map_or_default(time_precision)); + Ok(Box::new(DateTimeFormatterGregorian( + icu_datetime::FixedCalendarDateTimeFormatter::try_new_with_buffer_provider( + provider.get()?, + prefs, + options, + )? + .with_fset(), + ))) + } + + #[diplomat::attr(all(supports = fallible_constructors, supports = named_constructors), named_constructor = "mdet")] + #[diplomat::rust_link(icu::datetime::fieldsets::MDET, Struct)] + #[diplomat::rust_link(icu::datetime::fieldsets::MDET::with_length, FnInStruct, compact)] + #[diplomat::rust_link( + icu::datetime::fieldsets::MDET::with_time_precision, + FnInStruct, + compact + )] + #[diplomat::rust_link(icu::datetime::fieldsets::MDET::with_alignment, FnInStruct, compact)] + #[diplomat::rust_link(icu::datetime::fieldsets::MDET::short, FnInStruct, hidden)] + #[diplomat::rust_link(icu::datetime::fieldsets::MDET::medium, FnInStruct, hidden)] + #[diplomat::rust_link(icu::datetime::fieldsets::MDET::long, FnInStruct, hidden)] + #[diplomat::rust_link(icu::datetime::fieldsets::MDET::hm, FnInStruct, hidden)] + #[cfg(feature = "compiled_data")] + pub fn create_mdet( + locale: &Locale, + length: Option, + time_precision: Option, + alignment: Option, + ) -> Result, DateTimeFormatterLoadError> { + let prefs = (&locale.0).into(); + let options = icu_datetime::fieldsets::MDET::with_length(map_or_default(length)) + .with_alignment(map_or_default(alignment)) + .with_time_precision(map_or_default(time_precision)); + Ok(Box::new(DateTimeFormatterGregorian( + icu_datetime::FixedCalendarDateTimeFormatter::try_new(prefs, options)?.with_fset(), + ))) + } + + #[diplomat::attr(all(supports = fallible_constructors, supports = named_constructors), named_constructor = "mdet_with_provider")] + #[diplomat::rust_link(icu::datetime::fieldsets::MDET, Struct)] + #[diplomat::rust_link(icu::datetime::fieldsets::MDET::with_length, FnInStruct, compact)] + #[diplomat::rust_link( + icu::datetime::fieldsets::MDET::with_time_precision, + FnInStruct, + compact + )] + #[diplomat::rust_link(icu::datetime::fieldsets::MDET::with_alignment, FnInStruct, compact)] + #[cfg(feature = "buffer_provider")] + pub fn create_mdet_with_provider( + provider: &DataProvider, + locale: &Locale, + length: Option, + time_precision: Option, + alignment: Option, + ) -> Result, DateTimeFormatterLoadError> { + let prefs = (&locale.0).into(); + let options = icu_datetime::fieldsets::MDET::with_length(map_or_default(length)) + .with_alignment(map_or_default(alignment)) + .with_time_precision(map_or_default(time_precision)); + Ok(Box::new(DateTimeFormatterGregorian( + icu_datetime::FixedCalendarDateTimeFormatter::try_new_with_buffer_provider( + provider.get()?, + prefs, + options, + )? + .with_fset(), + ))) + } + + #[diplomat::attr(all(supports = fallible_constructors, supports = named_constructors), named_constructor = "ymdet")] + #[diplomat::rust_link(icu::datetime::fieldsets::YMDET, Struct)] + #[diplomat::rust_link(icu::datetime::fieldsets::YMDET::with_length, FnInStruct, compact)] + #[diplomat::rust_link( + icu::datetime::fieldsets::YMDET::with_time_precision, + FnInStruct, + compact + )] + #[diplomat::rust_link(icu::datetime::fieldsets::YMDET::with_alignment, FnInStruct, compact)] + #[diplomat::rust_link( + icu::datetime::fieldsets::YMDET::with_year_style, + FnInStruct, + compact + )] + #[diplomat::rust_link(icu::datetime::fieldsets::YMDET::short, FnInStruct, hidden)] + #[diplomat::rust_link(icu::datetime::fieldsets::YMDET::medium, FnInStruct, hidden)] + #[diplomat::rust_link(icu::datetime::fieldsets::YMDET::long, FnInStruct, hidden)] + #[diplomat::rust_link(icu::datetime::fieldsets::YMDET::hm, FnInStruct, hidden)] + #[cfg(feature = "compiled_data")] + pub fn create_ymdet( + locale: &Locale, + length: Option, + time_precision: Option, + alignment: Option, + year_style: Option, + ) -> Result, DateTimeFormatterLoadError> { + let prefs = (&locale.0).into(); + let options = icu_datetime::fieldsets::YMDET::with_length(map_or_default(length)) + .with_alignment(map_or_default(alignment)) + .with_time_precision(map_or_default(time_precision)) + .with_year_style(map_or_default(year_style)); + Ok(Box::new(DateTimeFormatterGregorian( + icu_datetime::FixedCalendarDateTimeFormatter::try_new(prefs, options)?.with_fset(), + ))) + } + + #[diplomat::attr(all(supports = fallible_constructors, supports = named_constructors), named_constructor = "ymdet_with_provider")] + #[diplomat::rust_link(icu::datetime::fieldsets::YMDET, Struct)] + #[diplomat::rust_link(icu::datetime::fieldsets::YMDET::with_length, FnInStruct, compact)] + #[diplomat::rust_link( + icu::datetime::fieldsets::YMDET::with_time_precision, + FnInStruct, + compact + )] + #[diplomat::rust_link(icu::datetime::fieldsets::YMDET::with_alignment, FnInStruct, compact)] + #[diplomat::rust_link( + icu::datetime::fieldsets::YMDET::with_year_style, + FnInStruct, + compact + )] + #[cfg(feature = "buffer_provider")] + pub fn create_ymdet_with_provider( + provider: &DataProvider, + locale: &Locale, + length: Option, + time_precision: Option, + alignment: Option, + year_style: Option, + ) -> Result, DateTimeFormatterLoadError> { + let prefs = (&locale.0).into(); + let options = icu_datetime::fieldsets::YMDET::with_length(map_or_default(length)) + .with_alignment(map_or_default(alignment)) + .with_time_precision(map_or_default(time_precision)) + .with_year_style(map_or_default(year_style)); + Ok(Box::new(DateTimeFormatterGregorian( + icu_datetime::FixedCalendarDateTimeFormatter::try_new_with_buffer_provider( + provider.get()?, + prefs, + options, + )? + .with_fset(), + ))) + } + + #[diplomat::attr(all(supports = fallible_constructors, supports = named_constructors), named_constructor = "et")] + #[diplomat::rust_link(icu::datetime::fieldsets::ET, Struct)] + #[diplomat::rust_link(icu::datetime::fieldsets::ET::with_length, FnInStruct, compact)] + #[diplomat::rust_link( + icu::datetime::fieldsets::ET::with_time_precision, + FnInStruct, + compact + )] + #[diplomat::rust_link(icu::datetime::fieldsets::ET::with_alignment, FnInStruct, compact)] + #[diplomat::rust_link(icu::datetime::fieldsets::ET::short, FnInStruct, hidden)] + #[diplomat::rust_link(icu::datetime::fieldsets::ET::medium, FnInStruct, hidden)] + #[diplomat::rust_link(icu::datetime::fieldsets::ET::long, FnInStruct, hidden)] + #[diplomat::rust_link(icu::datetime::fieldsets::ET::hm, FnInStruct, hidden)] + #[cfg(feature = "compiled_data")] + pub fn create_et( + locale: &Locale, + length: Option, + time_precision: Option, + alignment: Option, + ) -> Result, DateTimeFormatterLoadError> { + let prefs = (&locale.0).into(); + let options = icu_datetime::fieldsets::ET::with_length(map_or_default(length)) + .with_alignment(map_or_default(alignment)) + .with_time_precision(map_or_default(time_precision)); + Ok(Box::new(DateTimeFormatterGregorian( + icu_datetime::FixedCalendarDateTimeFormatter::try_new(prefs, options)?.with_fset(), + ))) + } + + #[diplomat::attr(all(supports = fallible_constructors, supports = named_constructors), named_constructor = "et_with_provider")] + #[diplomat::rust_link(icu::datetime::fieldsets::ET, Struct)] + #[diplomat::rust_link(icu::datetime::fieldsets::ET::with_length, FnInStruct, compact)] + #[diplomat::rust_link( + icu::datetime::fieldsets::ET::with_time_precision, + FnInStruct, + compact + )] + #[diplomat::rust_link(icu::datetime::fieldsets::ET::with_alignment, FnInStruct, compact)] + #[cfg(feature = "buffer_provider")] + pub fn create_et_with_provider( + provider: &DataProvider, + locale: &Locale, + length: Option, + time_precision: Option, + alignment: Option, + ) -> Result, DateTimeFormatterLoadError> { + let prefs = (&locale.0).into(); + let options = icu_datetime::fieldsets::ET::with_length(map_or_default(length)) + .with_alignment(map_or_default(alignment)) + .with_time_precision(map_or_default(time_precision)); + Ok(Box::new(DateTimeFormatterGregorian( + icu_datetime::FixedCalendarDateTimeFormatter::try_new_with_buffer_provider( + provider.get()?, + prefs, + options, + )? + .with_fset(), + ))) + } + + #[diplomat::rust_link(icu::datetime::FixedCalendarDateTimeFormatter::format, FnInStruct)] + #[diplomat::rust_link(icu::datetime::FormattedDateTime, Struct, hidden)] + #[diplomat::rust_link(icu::datetime::FormattedDateTime::to_string, FnInStruct, hidden)] + pub fn format_iso( + &self, + date: &IsoDate, + time: &Time, + write: &mut diplomat_runtime::DiplomatWrite, + ) { + let value = icu_timezone::DateTime { + date: date.0.to_calendar(Gregorian), + time: time.0, + }; + let _infallible = self.0.format(&value).write_to(write); + } + } +} + +impl From for icu_datetime::options::TimePrecision { + fn from(time_precision: ffi::TimePrecision) -> Self { + use icu_datetime::options::TimePrecision; + match time_precision { + ffi::TimePrecision::Hour => TimePrecision::Hour, + ffi::TimePrecision::Minute => TimePrecision::Minute, + ffi::TimePrecision::MinuteOptional => TimePrecision::MinuteOptional, + ffi::TimePrecision::Second => TimePrecision::Second, + ffi::TimePrecision::SecondF1 => { + TimePrecision::FractionalSecond(FractionalSecondDigits::F1) + } + ffi::TimePrecision::SecondF2 => { + TimePrecision::FractionalSecond(FractionalSecondDigits::F2) + } + ffi::TimePrecision::SecondF3 => { + TimePrecision::FractionalSecond(FractionalSecondDigits::F3) + } + ffi::TimePrecision::SecondF4 => { + TimePrecision::FractionalSecond(FractionalSecondDigits::F4) + } + ffi::TimePrecision::SecondF5 => { + TimePrecision::FractionalSecond(FractionalSecondDigits::F5) + } + ffi::TimePrecision::SecondF6 => { + TimePrecision::FractionalSecond(FractionalSecondDigits::F6) + } + ffi::TimePrecision::SecondF7 => { + TimePrecision::FractionalSecond(FractionalSecondDigits::F7) + } + ffi::TimePrecision::SecondF8 => { + TimePrecision::FractionalSecond(FractionalSecondDigits::F8) + } + ffi::TimePrecision::SecondF9 => { + TimePrecision::FractionalSecond(FractionalSecondDigits::F9) + } + } + } +} + +#[cfg(any(feature = "compiled_data", feature = "buffer_provider"))] +fn map_or_default(input: Option) -> Output +where + Output: From + Default, +{ + input.map(Output::from).unwrap_or_default() +} diff --git a/ffi/capi/tests/missing_apis.txt b/ffi/capi/tests/missing_apis.txt index 1fa8c59ad2d..7f303c31f0c 100644 --- a/ffi/capi/tests/missing_apis.txt +++ b/ffi/capi/tests/missing_apis.txt @@ -30,9 +30,6 @@ icu::collator::CollationType::try_from_key_value#FnInEnum icu::collator::CollationType::unicode_extension_key#FnInEnum icu::collator::CollationType::unicode_extension_value#FnInEnum icu::collator::CollatorPreferences::extend#FnInStruct -icu::datetime::DateTimeFormatter::with_fset#FnInStruct -icu::datetime::FixedCalendarDateTimeFormatter::into_formatter#FnInStruct -icu::datetime::FixedCalendarDateTimeFormatter::with_fset#FnInStruct icu::datetime::fieldsets::Combo#Struct icu::datetime::fieldsets::Combo::into_enums#FnInStruct icu::datetime::fieldsets::D#Struct @@ -63,14 +60,6 @@ icu::datetime::fieldsets::DE::with_zone_offset#FnInStruct icu::datetime::fieldsets::DE::with_zone_offset_long#FnInStruct icu::datetime::fieldsets::DE::with_zone_specific#FnInStruct icu::datetime::fieldsets::DE::with_zone_specific_long#FnInStruct -icu::datetime::fieldsets::DET#Struct -icu::datetime::fieldsets::DET::hm#FnInStruct -icu::datetime::fieldsets::DET::long#FnInStruct -icu::datetime::fieldsets::DET::medium#FnInStruct -icu::datetime::fieldsets::DET::short#FnInStruct -icu::datetime::fieldsets::DET::with_alignment#FnInStruct -icu::datetime::fieldsets::DET::with_length#FnInStruct -icu::datetime::fieldsets::DET::with_time_precision#FnInStruct icu::datetime::fieldsets::DET::with_zone_exemplar_city#FnInStruct icu::datetime::fieldsets::DET::with_zone_generic#FnInStruct icu::datetime::fieldsets::DET::with_zone_generic_long#FnInStruct @@ -79,14 +68,6 @@ icu::datetime::fieldsets::DET::with_zone_offset#FnInStruct icu::datetime::fieldsets::DET::with_zone_offset_long#FnInStruct icu::datetime::fieldsets::DET::with_zone_specific#FnInStruct icu::datetime::fieldsets::DET::with_zone_specific_long#FnInStruct -icu::datetime::fieldsets::DT#Struct -icu::datetime::fieldsets::DT::hm#FnInStruct -icu::datetime::fieldsets::DT::long#FnInStruct -icu::datetime::fieldsets::DT::medium#FnInStruct -icu::datetime::fieldsets::DT::short#FnInStruct -icu::datetime::fieldsets::DT::with_alignment#FnInStruct -icu::datetime::fieldsets::DT::with_length#FnInStruct -icu::datetime::fieldsets::DT::with_time_precision#FnInStruct icu::datetime::fieldsets::DT::with_zone_exemplar_city#FnInStruct icu::datetime::fieldsets::DT::with_zone_generic#FnInStruct icu::datetime::fieldsets::DT::with_zone_generic_long#FnInStruct @@ -108,14 +89,6 @@ icu::datetime::fieldsets::E::with_zone_offset#FnInStruct icu::datetime::fieldsets::E::with_zone_offset_long#FnInStruct icu::datetime::fieldsets::E::with_zone_specific#FnInStruct icu::datetime::fieldsets::E::with_zone_specific_long#FnInStruct -icu::datetime::fieldsets::ET#Struct -icu::datetime::fieldsets::ET::hm#FnInStruct -icu::datetime::fieldsets::ET::long#FnInStruct -icu::datetime::fieldsets::ET::medium#FnInStruct -icu::datetime::fieldsets::ET::short#FnInStruct -icu::datetime::fieldsets::ET::with_alignment#FnInStruct -icu::datetime::fieldsets::ET::with_length#FnInStruct -icu::datetime::fieldsets::ET::with_time_precision#FnInStruct icu::datetime::fieldsets::ET::with_zone_exemplar_city#FnInStruct icu::datetime::fieldsets::ET::with_zone_generic#FnInStruct icu::datetime::fieldsets::ET::with_zone_generic_long#FnInStruct @@ -160,14 +133,6 @@ icu::datetime::fieldsets::MDE::with_zone_offset#FnInStruct icu::datetime::fieldsets::MDE::with_zone_offset_long#FnInStruct icu::datetime::fieldsets::MDE::with_zone_specific#FnInStruct icu::datetime::fieldsets::MDE::with_zone_specific_long#FnInStruct -icu::datetime::fieldsets::MDET#Struct -icu::datetime::fieldsets::MDET::hm#FnInStruct -icu::datetime::fieldsets::MDET::long#FnInStruct -icu::datetime::fieldsets::MDET::medium#FnInStruct -icu::datetime::fieldsets::MDET::short#FnInStruct -icu::datetime::fieldsets::MDET::with_alignment#FnInStruct -icu::datetime::fieldsets::MDET::with_length#FnInStruct -icu::datetime::fieldsets::MDET::with_time_precision#FnInStruct icu::datetime::fieldsets::MDET::with_zone_exemplar_city#FnInStruct icu::datetime::fieldsets::MDET::with_zone_generic#FnInStruct icu::datetime::fieldsets::MDET::with_zone_generic_long#FnInStruct @@ -176,14 +141,6 @@ icu::datetime::fieldsets::MDET::with_zone_offset#FnInStruct icu::datetime::fieldsets::MDET::with_zone_offset_long#FnInStruct icu::datetime::fieldsets::MDET::with_zone_specific#FnInStruct icu::datetime::fieldsets::MDET::with_zone_specific_long#FnInStruct -icu::datetime::fieldsets::MDT#Struct -icu::datetime::fieldsets::MDT::hm#FnInStruct -icu::datetime::fieldsets::MDT::long#FnInStruct -icu::datetime::fieldsets::MDT::medium#FnInStruct -icu::datetime::fieldsets::MDT::short#FnInStruct -icu::datetime::fieldsets::MDT::with_alignment#FnInStruct -icu::datetime::fieldsets::MDT::with_length#FnInStruct -icu::datetime::fieldsets::MDT::with_time_precision#FnInStruct icu::datetime::fieldsets::MDT::with_zone_exemplar_city#FnInStruct icu::datetime::fieldsets::MDT::with_zone_generic#FnInStruct icu::datetime::fieldsets::MDT::with_zone_generic_long#FnInStruct @@ -259,15 +216,6 @@ icu::datetime::fieldsets::YMDE::with_zone_offset#FnInStruct icu::datetime::fieldsets::YMDE::with_zone_offset_long#FnInStruct icu::datetime::fieldsets::YMDE::with_zone_specific#FnInStruct icu::datetime::fieldsets::YMDE::with_zone_specific_long#FnInStruct -icu::datetime::fieldsets::YMDET#Struct -icu::datetime::fieldsets::YMDET::hm#FnInStruct -icu::datetime::fieldsets::YMDET::long#FnInStruct -icu::datetime::fieldsets::YMDET::medium#FnInStruct -icu::datetime::fieldsets::YMDET::short#FnInStruct -icu::datetime::fieldsets::YMDET::with_alignment#FnInStruct -icu::datetime::fieldsets::YMDET::with_length#FnInStruct -icu::datetime::fieldsets::YMDET::with_time_precision#FnInStruct -icu::datetime::fieldsets::YMDET::with_year_style#FnInStruct icu::datetime::fieldsets::YMDET::with_zone_exemplar_city#FnInStruct icu::datetime::fieldsets::YMDET::with_zone_generic#FnInStruct icu::datetime::fieldsets::YMDET::with_zone_generic_long#FnInStruct @@ -276,14 +224,6 @@ icu::datetime::fieldsets::YMDET::with_zone_offset#FnInStruct icu::datetime::fieldsets::YMDET::with_zone_offset_long#FnInStruct icu::datetime::fieldsets::YMDET::with_zone_specific#FnInStruct icu::datetime::fieldsets::YMDET::with_zone_specific_long#FnInStruct -icu::datetime::fieldsets::YMDT::hm#FnInStruct -icu::datetime::fieldsets::YMDT::long#FnInStruct -icu::datetime::fieldsets::YMDT::medium#FnInStruct -icu::datetime::fieldsets::YMDT::short#FnInStruct -icu::datetime::fieldsets::YMDT::with_alignment#FnInStruct -icu::datetime::fieldsets::YMDT::with_length#FnInStruct -icu::datetime::fieldsets::YMDT::with_time_precision#FnInStruct -icu::datetime::fieldsets::YMDT::with_year_style#FnInStruct icu::datetime::fieldsets::YMDT::with_zone_exemplar_city#FnInStruct icu::datetime::fieldsets::YMDT::with_zone_generic#FnInStruct icu::datetime::fieldsets::YMDT::with_zone_generic_long#FnInStruct @@ -346,19 +286,6 @@ icu::datetime::options::FractionalSecondDigits#Enum icu::datetime::options::FractionalSecondError#Enum icu::datetime::options::TimePrecision#Enum icu::datetime::options::YearStyle#Enum -icu::datetime::pattern::DateTimePattern#Struct -icu::datetime::pattern::DateTimePattern::from_str#FnInStruct -icu::datetime::pattern::DateTimePattern::to_string#FnInStruct -icu::datetime::pattern::DateTimePattern::try_from_pattern_str#FnInStruct -icu::datetime::pattern::DateTimePattern::write_to#FnInStruct -icu::datetime::pattern::DateTimePatternFormatter#Struct -icu::datetime::pattern::DateTimePatternFormatter::format#FnInStruct -icu::datetime::pattern::DayPeriodNameLength#Enum -icu::datetime::pattern::FormattedDateTimePattern#Struct -icu::datetime::pattern::FormattedDateTimePattern::try_write_to_parts#FnInStruct -icu::datetime::pattern::MonthNameLength#Enum -icu::datetime::pattern::WeekdayNameLength#Enum -icu::datetime::pattern::YearNameLength#Enum icu::list::ListFormatterOptions#Struct icu::list::ListFormatterOptions::default#FnInStruct icu::list::ListFormatterOptions::with_length#FnInStruct diff --git a/ffi/dart/test/icu_test.dart b/ffi/dart/test/icu_test.dart index acdc669cc91..ad28a60c5b8 100644 --- a/ffi/dart/test/icu_test.dart +++ b/ffi/dart/test/icu_test.dart @@ -56,19 +56,70 @@ void main() { }); test('DateTime formatting', () { - final zonedDateTime = - ZonedDateTimeParser().tryIsoFromStr('2025-01-15T14:32:12.34+01[Europe/Zurich]'); + final zonedDateTimeIso = ZonedDateTimeParser() + .tryIsoFromStr('2025-01-15T14:32:12.34+01[Europe/Zurich]'); - var locale = Locale.fromString('de'); + final zonedDateTimeBuddhist = ZonedDateTimeParser().tryFromStr( + '2026-01-15T05:32:12.34+07[Asia/Bangkok][u-ca=buddhist]', + Calendar.forKind(AnyCalendarKind.buddhist)); + + var locale = Locale.fromString('de-u-ca-islamic'); + + expect( + DateTimeFormatter.ymdet(locale) + .formatIso(zonedDateTimeIso.date, zonedDateTimeIso.time), + 'Mi., 14. Raj. 1446 AH, 14:32:12'); + + expect( + DateTimeFormatter.ymdet( + locale, + length: DateTimeLength.long, + timePrecision: TimePrecision.minute, + ).formatIso(zonedDateTimeIso.date, zonedDateTimeIso.time), + 'Mittwoch, 14. Radschab 1446 AH, 14:32'); + + expect( + () => DateTimeFormatter.ymdet(locale).formatSameCalendar( + zonedDateTimeBuddhist.date, zonedDateTimeBuddhist.time), + throwsA(DateTimeMismatchedCalendarError( + thisKind: AnyCalendarKind.islamicObservational, + dateKind: AnyCalendarKind.buddhist))); + + expect( + DateTimeFormatter.ymdet(locale).formatSameCalendar( + zonedDateTimeBuddhist.date.toCalendar( + Calendar.forKind(AnyCalendarKind.islamicObservational)), + zonedDateTimeBuddhist.time), + 'Do., 25. Raj. 1447 AH, 05:32:12'); + + expect( + DateTimeFormatter.ymdet(locale).formatIso( + zonedDateTimeBuddhist.date.toIso(), zonedDateTimeBuddhist.time), + 'Do., 25. Raj. 1447 AH, 05:32:12'); + + expect( + DateTimeFormatterGregorian.ymdet(locale) + .formatIso(zonedDateTimeIso.date, zonedDateTimeIso.time), + 'Mi., 15.01.2025, 14:32:12'); + + expect( + DateTimeFormatterGregorian.ymdet( + locale, + length: DateTimeLength.long, + timePrecision: TimePrecision.minute, + ).formatIso(zonedDateTimeIso.date, zonedDateTimeIso.time), + 'Mittwoch, 15. Januar 2025, 14:32'); expect( ZonedDateTimeFormatter.withLength(locale, DateTimeLength.long) - .formatIso(zonedDateTime.date, zonedDateTime.time, zonedDateTime.zone), - '15. Januar 2025, 14:32:12 MEZ'); + .formatIso(zonedDateTimeIso.date, zonedDateTimeIso.time, + zonedDateTimeIso.zone), + '14. Radschab 1446 AH, 14:32:12 MEZ'); expect( ZonedDateTimeFormatter.withLength(locale, DateTimeLength.short) - .formatIso(zonedDateTime.date, zonedDateTime.time, zonedDateTime.zone), - '15.01.25, 14:32:12 MEZ'); + .formatIso(zonedDateTimeIso.date, zonedDateTimeIso.time, + zonedDateTimeIso.zone), + '14.07.46 AH, 14:32:12 MEZ'); }); } diff --git a/tools/make/diplomat-coverage/src/allowlist.rs b/tools/make/diplomat-coverage/src/allowlist.rs index 010fc0170a5..d3aa3a11d44 100644 --- a/tools/make/diplomat-coverage/src/allowlist.rs +++ b/tools/make/diplomat-coverage/src/allowlist.rs @@ -165,20 +165,11 @@ lazy_static::lazy_static! { "icu::calendar::types::YearAmbiguity", "icu::calendar::types::YearInfo::year_ambiguity", - // Strongly calendar-typed datetime methods - "icu::datetime::DateTimeFormatter::format_same_calendar", - "icu::datetime::DateTimeFormatter::try_into_typed_formatter", - "icu::datetime::MismatchedCalendarError", - // Not planned for 2.0: Would need to introduce diplomat writeable with parts "icu::list::parts", "icu::datetime::parts", "icu::decimal::parts", - // Not planned for 2.0: Intermediate Writeable types. - "icu::datetime::FormattedDateTime::to_string", - "icu::datetime::FormattedDateTime::pattern", - // Not planned for 2.0: Until someone needs them "icu::locale::extensions", "icu::locale::subtags", @@ -252,8 +243,14 @@ lazy_static::lazy_static! { "fixed_decimal::UnsignedRoundingMode", // Not planned for 2.0 - // Lower-level pattern API - "icu::datetime::pattern::TypedDateTimeNames", + // DateTimePattern and related low-level APIs + "icu::datetime::pattern", + "icu::datetime::FormattedDateTime::pattern", + + // Not planned for 2.0 + // DateTimeFormatter conversion functions that involve moving opaques + "icu::datetime::DateTimeFormatter::try_into_typed_formatter", + "icu::datetime::FixedCalendarDateTimeFormatter::into_formatter", // Not planned for 2.0 // Serde-specific @@ -331,10 +328,12 @@ lazy_static::lazy_static! { // "Internal" trait that should never be called directly "icu::calendar::Calendar", - // Rust-specific calendar wrapper stuff + // Rust-specific calendar and field set wrapper stuff "icu::calendar::AsCalendar", "icu::calendar::Ref", "icu::datetime::CldrCalendar", + "icu::datetime::DateTimeFormatter::with_fset", + "icu::datetime::FixedCalendarDateTimeFormatter::with_fset", // TODO-2.0: needs investigation "icu::calendar::Date::wrap_calendar_in_rc", "icu::calendar::Date::wrap_calendar_in_arc", diff --git a/tutorials/cpp/Cargo.lock b/tutorials/cpp/Cargo.lock index b99c97a74b3..1162ea4b167 100644 --- a/tutorials/cpp/Cargo.lock +++ b/tutorials/cpp/Cargo.lock @@ -1,6 +1,6 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 [[package]] name = "autocfg" @@ -53,8 +53,7 @@ dependencies = [ [[package]] name = "diplomat" version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef0c3a613b09df83bdd42393cd532830a795053102f87461fca1726999829c60" +source = "git+https://github.com/rust-diplomat/diplomat?rev=427b6197627a1b6cd1f9b85b5b8fbace2b5d1efc#427b6197627a1b6cd1f9b85b5b8fbace2b5d1efc" dependencies = [ "diplomat_core", "proc-macro2", @@ -65,8 +64,7 @@ dependencies = [ [[package]] name = "diplomat-runtime" version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc1708f176e12755d6d6571ad9b0ebbd3b428223b5cdf63a38eecf1479c13e70" +source = "git+https://github.com/rust-diplomat/diplomat?rev=427b6197627a1b6cd1f9b85b5b8fbace2b5d1efc#427b6197627a1b6cd1f9b85b5b8fbace2b5d1efc" dependencies = [ "log", ] @@ -74,8 +72,7 @@ dependencies = [ [[package]] name = "diplomat_core" version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58e5ba87fee6b8b9dcc575cfbc84ae97b8b9f891fa27f670996a4684e20bd178" +source = "git+https://github.com/rust-diplomat/diplomat?rev=427b6197627a1b6cd1f9b85b5b8fbace2b5d1efc#427b6197627a1b6cd1f9b85b5b8fbace2b5d1efc" dependencies = [ "proc-macro2", "quote", @@ -529,6 +526,7 @@ version = "2.0.0-beta1" dependencies = [ "displaydoc", "icu_provider", + "icu_provider_registry", "serde", "serde-json-core", ] @@ -542,6 +540,10 @@ dependencies = [ "syn", ] +[[package]] +name = "icu_provider_registry" +version = "2.0.0-beta1" + [[package]] name = "icu_segmenter" version = "2.0.0-beta1" @@ -575,6 +577,7 @@ dependencies = [ "icu_calendar", "icu_provider", "icu_timezone_data", + "ixdtf", "serde", "tinystr", "writeable", @@ -708,7 +711,7 @@ dependencies = [ [[package]] name = "potential_utf" -version = "0.1.0" +version = "0.1.1-dev" dependencies = [ "serde", "writeable", @@ -1055,7 +1058,7 @@ dependencies = [ [[package]] name = "zerovec" -version = "0.11.0" +version = "0.11.1-dev" dependencies = [ "serde", "yoke", @@ -1124,10 +1127,6 @@ version = "0.2.0" name = "icu_provider_export" version = "2.0.0-beta1" -[[patch.unused]] -name = "icu_provider_registry" -version = "2.0.0-beta1" - [[patch.unused]] name = "icu_provider_source" version = "2.0.0-beta1" diff --git a/tutorials/cpp/datetime.cpp b/tutorials/cpp/datetime.cpp index 7036d01b072..21d58c784bd 100644 --- a/tutorials/cpp/datetime.cpp +++ b/tutorials/cpp/datetime.cpp @@ -3,8 +3,8 @@ // (online at: https://github.com/unicode-org/icu4x/blob/main/LICENSE ). #include -#include #include +#include #include #include #include @@ -16,6 +16,7 @@ #include #include #include +#include using namespace icu4x; @@ -24,11 +25,80 @@ int main() { std::unique_ptr locale = Locale::from_string("es").ok().value(); std::cout << "Running test for locale " << locale->to_string() << std::endl; + bool saw_unexpected_output = false; + std::unique_ptr date = IsoDate::create(2022, 07, 11).ok().value(); std::unique_ptr