use crate::calendar::AnyCalendarProvider;
use crate::external_loaders::*;
use crate::format::datetime::try_write_pattern_items;
use crate::format::datetime::DateTimeWriteError;
use crate::format::neo::*;
use crate::input::ExtractedInput;
use crate::neo_marker::DateInputMarkers;
use crate::neo_marker::HasConstComponents;
use crate::neo_marker::{
AllInputMarkers, CalMarkers, ConvertCalendar, DateDataMarkers, DateTimeMarkers,
IsAnyCalendarKind, IsInCalendar, IsRuntimeComponents, NeoGetField, TimeMarkers,
TypedDateDataMarkers, ZoneMarkers,
};
use crate::neo_pattern::DateTimePattern;
use crate::neo_skeleton::{NeoComponents, NeoSkeletonLength};
use crate::options::preferences::HourCycle;
use crate::provider::neo::*;
use crate::raw::neo::*;
use crate::CldrCalendar;
use core::fmt;
use core::marker::PhantomData;
use icu_calendar::provider::{
ChineseCacheV1Marker, DangiCacheV1Marker, IslamicObservationalCacheV1Marker,
IslamicUmmAlQuraCacheV1Marker, JapaneseErasV1Marker, JapaneseExtendedErasV1Marker,
WeekDataV2Marker,
};
use icu_calendar::AnyCalendar;
use icu_decimal::provider::DecimalSymbolsV1Marker;
use icu_provider::prelude::*;
use writeable::TryWriteable;
macro_rules! gen_any_buffer_constructors_with_external_loader {
($compiled_fn:ident, $any_fn:ident, $buffer_fn:ident, $internal_fn:ident, $($arg:ident: $ty:ty),+) => {
#[doc = icu_provider::gen_any_buffer_unstable_docs!(ANY, Self::$compiled_fn)]
pub fn $any_fn<P>(
provider: &P,
locale: &DataLocale,
$($arg: $ty),+
) -> Result<Self, LoadError>
where
P: AnyProvider + ?Sized,
{
Self::$internal_fn(
&provider.as_downcasting(),
&ExternalLoaderAny(provider),
locale,
$($arg.into()),+
)
}
#[doc = icu_provider::gen_any_buffer_unstable_docs!(BUFFER, Self::$compiled_fn)]
#[cfg(feature = "serde")]
pub fn $buffer_fn<P>(
provider: &P,
locale: &DataLocale,
$($arg: $ty),+
) -> Result<Self, LoadError>
where
P: BufferProvider + ?Sized,
{
Self::$internal_fn(
&provider.as_deserializing(),
&ExternalLoaderBuffer(provider),
locale,
$($arg.into()),+
)
}
};
(R, $compiled_fn:ident, $any_fn:ident, $buffer_fn:ident, $internal_fn:ident, $($arg:ident: $ty:ty),+) => {
#[doc = icu_provider::gen_any_buffer_unstable_docs!(ANY, Self::$compiled_fn)]
pub fn $any_fn<P>(
provider: &P,
locale: &DataLocale,
$($arg: $ty),+
) -> Result<Self, LoadError>
where
P: AnyProvider + ?Sized,
{
Self::$internal_fn(
&provider.as_downcasting(),
&ExternalLoaderAny(provider),
locale,
R::COMPONENTS,
$($arg.into()),+
)
}
#[doc = icu_provider::gen_any_buffer_unstable_docs!(BUFFER, Self::$compiled_fn)]
#[cfg(feature = "serde")]
pub fn $buffer_fn<P>(
provider: &P,
locale: &DataLocale,
$($arg: $ty),+
) -> Result<Self, LoadError>
where
P: BufferProvider + ?Sized,
{
Self::$internal_fn(
&provider.as_deserializing(),
&ExternalLoaderBuffer(provider),
locale,
R::COMPONENTS,
$($arg.into()),+
)
}
};
(S: $skel:path | $compts:path, $compiled_fn:ident, $any_fn:ident, $buffer_fn:ident, $internal_fn:ident, $($arg:ident: $ty:ty),+) => {
#[doc = icu_provider::gen_any_buffer_unstable_docs!(ANY, Self::$compiled_fn)]
pub fn $any_fn<S, P>(
provider: &P,
locale: &DataLocale,
$($arg: $ty),+
) -> Result<Self, LoadError>
where
S: ?Sized + $skel + $compts,
P: AnyProvider + ?Sized,
{
Self::$internal_fn::<S, _, _>(
&provider.as_downcasting(),
&ExternalLoaderAny(provider),
locale,
$($arg),+
)
}
#[doc = icu_provider::gen_any_buffer_unstable_docs!(BUFFER, Self::$compiled_fn)]
#[cfg(feature = "serde")]
pub fn $buffer_fn<S, P>(
provider: &P,
locale: &DataLocale,
$($arg: $ty),+
) -> Result<Self, LoadError>
where
S: ?Sized + $skel + $compts,
P: BufferProvider + ?Sized,
{
Self::$internal_fn::<S, _, _>(
&provider.as_deserializing(),
&ExternalLoaderBuffer(provider),
locale,
$($arg),+
)
}
};
}
#[derive(Debug, Copy, Clone, PartialEq, Eq)]
#[non_exhaustive]
pub struct NeoOptions<R: DateTimeMarkers> {
pub length: R::LengthOption,
pub alignment: R::AlignmentOption,
pub era_display: R::EraDisplayOption,
pub fractional_second_digits: R::FractionalSecondDigitsOption,
}
impl<R> From<NeoSkeletonLength> for NeoOptions<R>
where
R: DateTimeMarkers,
R::LengthOption: From<NeoSkeletonLength>,
R::AlignmentOption: Default,
R::EraDisplayOption: Default,
R::FractionalSecondDigitsOption: Default,
{
#[inline]
fn from(value: NeoSkeletonLength) -> Self {
NeoOptions {
length: value.into(),
alignment: Default::default(),
era_display: Default::default(),
fractional_second_digits: Default::default(),
}
}
}
impl<R> Default for NeoOptions<R>
where
R: DateTimeMarkers,
R::LengthOption: Default,
R::AlignmentOption: Default,
R::EraDisplayOption: Default,
R::FractionalSecondDigitsOption: Default,
{
#[inline]
fn default() -> Self {
NeoOptions {
length: Default::default(),
alignment: Default::default(),
era_display: Default::default(),
fractional_second_digits: Default::default(),
}
}
}
size_test!(TypedNeoFormatter<icu_calendar::Gregorian, crate::neo_marker::NeoYearMonthDayMarker>, typed_neo_year_month_day_formatter_size, 504);
#[doc = typed_neo_year_month_day_formatter_size!()]
#[derive(Debug)]
pub struct TypedNeoFormatter<C: CldrCalendar, R: DateTimeNamesMarker> {
selection: DateTimeZonePatternSelectionData,
names: RawDateTimeNames<R>,
_calendar: PhantomData<C>,
}
impl<C: CldrCalendar, R: DateTimeMarkers + HasConstComponents> TypedNeoFormatter<C, R>
where
R::D: TypedDateDataMarkers<C>,
R::T: TimeMarkers,
R::Z: ZoneMarkers,
{
#[cfg(feature = "compiled_data")]
pub fn try_new(locale: &DataLocale, options: NeoOptions<R>) -> Result<Self, LoadError>
where
crate::provider::Baked: Sized
+ DataProvider<<R::D as TypedDateDataMarkers<C>>::YearNamesV1Marker>
+ DataProvider<<R::D as TypedDateDataMarkers<C>>::MonthNamesV1Marker>
+ DataProvider<<R::D as TypedDateDataMarkers<C>>::DateSkeletonPatternsV1Marker>
+ DataProvider<<R::D as TypedDateDataMarkers<C>>::WeekdayNamesV1Marker>
+ DataProvider<<R::T as TimeMarkers>::DayPeriodNamesV1Marker>
+ DataProvider<<R::T as TimeMarkers>::TimeSkeletonPatternsV1Marker>
+ DataProvider<<R::Z as ZoneMarkers>::EssentialsV1Marker>
+ DataProvider<<R::Z as ZoneMarkers>::ExemplarCitiesV1Marker>
+ DataProvider<<R::Z as ZoneMarkers>::GenericLongV1Marker>
+ DataProvider<<R::Z as ZoneMarkers>::GenericShortV1Marker>
+ DataProvider<<R::Z as ZoneMarkers>::SpecificLongV1Marker>
+ DataProvider<<R::Z as ZoneMarkers>::SpecificShortV1Marker>
+ DataProvider<R::GluePatternV1Marker>,
{
Self::try_new_internal(
&crate::provider::Baked,
&ExternalLoaderCompiledData,
locale,
R::COMPONENTS,
options,
)
}
gen_any_buffer_constructors_with_external_loader!(
R,
try_new,
try_new_with_any_provider,
try_new_with_buffer_provider,
try_new_internal,
options: NeoOptions<R>
);
#[doc = icu_provider::gen_any_buffer_unstable_docs!(UNSTABLE, Self::try_new)]
pub fn try_new_unstable<P>(
provider: &P,
locale: &DataLocale,
options: NeoOptions<R>,
) -> Result<Self, LoadError>
where
P: ?Sized
+ DataProvider<<R::D as TypedDateDataMarkers<C>>::YearNamesV1Marker>
+ DataProvider<<R::D as TypedDateDataMarkers<C>>::MonthNamesV1Marker>
+ DataProvider<<R::D as TypedDateDataMarkers<C>>::DateSkeletonPatternsV1Marker>
+ DataProvider<<R::D as TypedDateDataMarkers<C>>::WeekdayNamesV1Marker>
+ DataProvider<<R::T as TimeMarkers>::DayPeriodNamesV1Marker>
+ DataProvider<<R::T as TimeMarkers>::TimeSkeletonPatternsV1Marker>
+ DataProvider<<R::Z as ZoneMarkers>::EssentialsV1Marker>
+ DataProvider<<R::Z as ZoneMarkers>::ExemplarCitiesV1Marker>
+ DataProvider<<R::Z as ZoneMarkers>::GenericLongV1Marker>
+ DataProvider<<R::Z as ZoneMarkers>::GenericShortV1Marker>
+ DataProvider<<R::Z as ZoneMarkers>::SpecificLongV1Marker>
+ DataProvider<<R::Z as ZoneMarkers>::SpecificShortV1Marker>
+ DataProvider<R::GluePatternV1Marker>
+ DataProvider<DecimalSymbolsV1Marker>
+ DataProvider<WeekDataV2Marker>,
{
Self::try_new_internal(
provider,
&ExternalLoaderUnstable(provider),
locale,
R::COMPONENTS,
options,
)
}
}
impl<C: CldrCalendar, R: DateTimeMarkers + IsRuntimeComponents> TypedNeoFormatter<C, R>
where
R::D: TypedDateDataMarkers<C>,
R::T: TimeMarkers,
R::Z: ZoneMarkers,
{
#[cfg(feature = "compiled_data")]
pub fn try_new_with_components(
locale: &DataLocale,
components: R,
options: NeoOptions<R>,
) -> Result<Self, LoadError>
where
crate::provider::Baked: Sized
+ DataProvider<<R::D as TypedDateDataMarkers<C>>::YearNamesV1Marker>
+ DataProvider<<R::D as TypedDateDataMarkers<C>>::MonthNamesV1Marker>
+ DataProvider<<R::D as TypedDateDataMarkers<C>>::DateSkeletonPatternsV1Marker>
+ DataProvider<<R::D as TypedDateDataMarkers<C>>::WeekdayNamesV1Marker>
+ DataProvider<<R::T as TimeMarkers>::DayPeriodNamesV1Marker>
+ DataProvider<<R::T as TimeMarkers>::TimeSkeletonPatternsV1Marker>
+ DataProvider<<R::Z as ZoneMarkers>::EssentialsV1Marker>
+ DataProvider<<R::Z as ZoneMarkers>::ExemplarCitiesV1Marker>
+ DataProvider<<R::Z as ZoneMarkers>::GenericLongV1Marker>
+ DataProvider<<R::Z as ZoneMarkers>::GenericShortV1Marker>
+ DataProvider<<R::Z as ZoneMarkers>::SpecificLongV1Marker>
+ DataProvider<<R::Z as ZoneMarkers>::SpecificShortV1Marker>
+ DataProvider<R::GluePatternV1Marker>,
{
Self::try_new_internal(
&crate::provider::Baked,
&ExternalLoaderCompiledData,
locale,
components.into(),
options,
)
}
gen_any_buffer_constructors_with_external_loader!(
try_new_with_components,
try_new_with_components_with_any_provider,
try_new_with_components_with_buffer_provider,
try_new_internal,
components: R,
options: NeoOptions<R>
);
#[doc = icu_provider::gen_any_buffer_unstable_docs!(UNSTABLE, Self::try_new)]
pub fn try_new_with_components_unstable<P>(
provider: &P,
locale: &DataLocale,
components: R,
options: NeoOptions<R>,
) -> Result<Self, LoadError>
where
P: ?Sized
+ DataProvider<<R::D as TypedDateDataMarkers<C>>::YearNamesV1Marker>
+ DataProvider<<R::D as TypedDateDataMarkers<C>>::MonthNamesV1Marker>
+ DataProvider<<R::D as TypedDateDataMarkers<C>>::DateSkeletonPatternsV1Marker>
+ DataProvider<<R::D as TypedDateDataMarkers<C>>::WeekdayNamesV1Marker>
+ DataProvider<<R::T as TimeMarkers>::DayPeriodNamesV1Marker>
+ DataProvider<<R::T as TimeMarkers>::TimeSkeletonPatternsV1Marker>
+ DataProvider<<R::Z as ZoneMarkers>::EssentialsV1Marker>
+ DataProvider<<R::Z as ZoneMarkers>::ExemplarCitiesV1Marker>
+ DataProvider<<R::Z as ZoneMarkers>::GenericLongV1Marker>
+ DataProvider<<R::Z as ZoneMarkers>::GenericShortV1Marker>
+ DataProvider<<R::Z as ZoneMarkers>::SpecificLongV1Marker>
+ DataProvider<<R::Z as ZoneMarkers>::SpecificShortV1Marker>
+ DataProvider<R::GluePatternV1Marker>
+ DataProvider<DecimalSymbolsV1Marker>
+ DataProvider<WeekDataV2Marker>,
{
Self::try_new_internal(
provider,
&ExternalLoaderUnstable(provider),
locale,
components.into(),
options,
)
}
}
impl<C: CldrCalendar, R: DateTimeMarkers> TypedNeoFormatter<C, R>
where
R::D: TypedDateDataMarkers<C>,
R::T: TimeMarkers,
R::Z: ZoneMarkers,
{
fn try_new_internal<P, L>(
provider: &P,
loader: &L,
locale: &DataLocale,
components: NeoComponents,
options: NeoOptions<R>,
) -> Result<Self, LoadError>
where
P: ?Sized
+ DataProvider<<R::D as TypedDateDataMarkers<C>>::YearNamesV1Marker>
+ DataProvider<<R::D as TypedDateDataMarkers<C>>::MonthNamesV1Marker>
+ DataProvider<<R::D as TypedDateDataMarkers<C>>::DateSkeletonPatternsV1Marker>
+ DataProvider<<R::D as TypedDateDataMarkers<C>>::WeekdayNamesV1Marker>
+ DataProvider<<R::T as TimeMarkers>::DayPeriodNamesV1Marker>
+ DataProvider<<R::T as TimeMarkers>::TimeSkeletonPatternsV1Marker>
+ DataProvider<<R::Z as ZoneMarkers>::EssentialsV1Marker>
+ DataProvider<<R::Z as ZoneMarkers>::ExemplarCitiesV1Marker>
+ DataProvider<<R::Z as ZoneMarkers>::GenericLongV1Marker>
+ DataProvider<<R::Z as ZoneMarkers>::GenericShortV1Marker>
+ DataProvider<<R::Z as ZoneMarkers>::SpecificLongV1Marker>
+ DataProvider<<R::Z as ZoneMarkers>::SpecificShortV1Marker>
+ DataProvider<R::GluePatternV1Marker>,
L: FixedDecimalFormatterLoader + WeekCalculatorLoader,
{
let hour_cycle = locale
.get_unicode_ext(&icu_locale_core::extensions::unicode::key!("hc"))
.as_ref()
.and_then(HourCycle::from_locale_value);
let selection = DateTimeZonePatternSelectionData::try_new_with_skeleton(
&<R::D as TypedDateDataMarkers<C>>::DateSkeletonPatternsV1Marker::bind(provider),
&<R::T as TimeMarkers>::TimeSkeletonPatternsV1Marker::bind(provider),
&R::GluePatternV1Marker::bind(provider),
locale,
options.length.into(),
components,
options.alignment.into(),
options.era_display.into(),
options.fractional_second_digits.into(),
hour_cycle,
)
.map_err(LoadError::Data)?;
let mut names = RawDateTimeNames::new_without_fixed_decimal_formatter();
names.load_for_pattern(
&<R::D as TypedDateDataMarkers<C>>::YearNamesV1Marker::bind(provider),
&<R::D as TypedDateDataMarkers<C>>::MonthNamesV1Marker::bind(provider),
&<R::D as TypedDateDataMarkers<C>>::WeekdayNamesV1Marker::bind(provider),
&<R::T as TimeMarkers>::DayPeriodNamesV1Marker::bind(provider),
&<R::Z as ZoneMarkers>::EssentialsV1Marker::bind(provider),
&<R::Z as ZoneMarkers>::ExemplarCitiesV1Marker::bind(provider),
&<R::Z as ZoneMarkers>::GenericLongV1Marker::bind(provider),
&<R::Z as ZoneMarkers>::GenericShortV1Marker::bind(provider),
&<R::Z as ZoneMarkers>::SpecificLongV1Marker::bind(provider),
&<R::Z as ZoneMarkers>::SpecificShortV1Marker::bind(provider),
Some(loader), Some(loader), locale,
selection.pattern_items_for_data_loading(),
)?;
Ok(Self {
selection,
names,
_calendar: PhantomData,
})
}
}
impl<C: CldrCalendar, R: DateTimeMarkers> TypedNeoFormatter<C, R>
where
R::D: DateInputMarkers,
R::T: TimeMarkers,
R::Z: ZoneMarkers,
{
pub fn format<I>(&self, input: &I) -> FormattedNeoDateTime
where
I: ?Sized + IsInCalendar<C> + AllInputMarkers<R>,
{
let input = ExtractedInput::extract_from_neo_input::<R::D, R::T, R::Z, I>(input);
FormattedNeoDateTime {
pattern: self.selection.select(&input),
input,
names: self.names.as_borrowed(),
}
}
}
size_test!(
NeoFormatter<crate::neo_marker::NeoYearMonthDayMarker>,
neo_year_month_day_formatter_size,
560
);
#[doc = neo_year_month_day_formatter_size!()]
#[derive(Debug)]
pub struct NeoFormatter<R: DateTimeNamesMarker> {
selection: DateTimeZonePatternSelectionData,
names: RawDateTimeNames<R>,
calendar: AnyCalendar,
}
impl<R: DateTimeMarkers + HasConstComponents> NeoFormatter<R>
where
R::D: DateDataMarkers,
R::T: TimeMarkers,
R::Z: ZoneMarkers,
{
#[inline(never)]
#[cfg(feature = "compiled_data")]
pub fn try_new(locale: &DataLocale, options: NeoOptions<R>) -> Result<Self, LoadError>
where
crate::provider::Baked: Sized
+ DataProvider<<<R::D as DateDataMarkers>::Year as CalMarkers<YearNamesV1Marker>>::Buddhist>
+ DataProvider<<<R::D as DateDataMarkers>::Year as CalMarkers<YearNamesV1Marker>>::Chinese>
+ DataProvider<<<R::D as DateDataMarkers>::Year as CalMarkers<YearNamesV1Marker>>::Coptic>
+ DataProvider<<<R::D as DateDataMarkers>::Year as CalMarkers<YearNamesV1Marker>>::Dangi>
+ DataProvider<<<R::D as DateDataMarkers>::Year as CalMarkers<YearNamesV1Marker>>::Ethiopian>
+ DataProvider<<<R::D as DateDataMarkers>::Year as CalMarkers<YearNamesV1Marker>>::EthiopianAmeteAlem>
+ DataProvider<<<R::D as DateDataMarkers>::Year as CalMarkers<YearNamesV1Marker>>::Gregorian>
+ DataProvider<<<R::D as DateDataMarkers>::Year as CalMarkers<YearNamesV1Marker>>::Hebrew>
+ DataProvider<<<R::D as DateDataMarkers>::Year as CalMarkers<YearNamesV1Marker>>::Indian>
+ DataProvider<<<R::D as DateDataMarkers>::Year as CalMarkers<YearNamesV1Marker>>::IslamicCivil>
+ DataProvider<<<R::D as DateDataMarkers>::Year as CalMarkers<YearNamesV1Marker>>::IslamicObservational>
+ DataProvider<<<R::D as DateDataMarkers>::Year as CalMarkers<YearNamesV1Marker>>::IslamicTabular>
+ DataProvider<<<R::D as DateDataMarkers>::Year as CalMarkers<YearNamesV1Marker>>::IslamicUmmAlQura>
+ DataProvider<<<R::D as DateDataMarkers>::Year as CalMarkers<YearNamesV1Marker>>::Japanese>
+ DataProvider<<<R::D as DateDataMarkers>::Year as CalMarkers<YearNamesV1Marker>>::JapaneseExtended>
+ DataProvider<<<R::D as DateDataMarkers>::Year as CalMarkers<YearNamesV1Marker>>::Persian>
+ DataProvider<<<R::D as DateDataMarkers>::Year as CalMarkers<YearNamesV1Marker>>::Roc>
+ DataProvider<<<R::D as DateDataMarkers>::Month as CalMarkers<MonthNamesV1Marker>>::Buddhist>
+ DataProvider<<<R::D as DateDataMarkers>::Month as CalMarkers<MonthNamesV1Marker>>::Chinese>
+ DataProvider<<<R::D as DateDataMarkers>::Month as CalMarkers<MonthNamesV1Marker>>::Coptic>
+ DataProvider<<<R::D as DateDataMarkers>::Month as CalMarkers<MonthNamesV1Marker>>::Dangi>
+ DataProvider<<<R::D as DateDataMarkers>::Month as CalMarkers<MonthNamesV1Marker>>::Ethiopian>
+ DataProvider<<<R::D as DateDataMarkers>::Month as CalMarkers<MonthNamesV1Marker>>::EthiopianAmeteAlem>
+ DataProvider<<<R::D as DateDataMarkers>::Month as CalMarkers<MonthNamesV1Marker>>::Gregorian>
+ DataProvider<<<R::D as DateDataMarkers>::Month as CalMarkers<MonthNamesV1Marker>>::Hebrew>
+ DataProvider<<<R::D as DateDataMarkers>::Month as CalMarkers<MonthNamesV1Marker>>::Indian>
+ DataProvider<<<R::D as DateDataMarkers>::Month as CalMarkers<MonthNamesV1Marker>>::IslamicCivil>
+ DataProvider<<<R::D as DateDataMarkers>::Month as CalMarkers<MonthNamesV1Marker>>::IslamicObservational>
+ DataProvider<<<R::D as DateDataMarkers>::Month as CalMarkers<MonthNamesV1Marker>>::IslamicTabular>
+ DataProvider<<<R::D as DateDataMarkers>::Month as CalMarkers<MonthNamesV1Marker>>::IslamicUmmAlQura>
+ DataProvider<<<R::D as DateDataMarkers>::Month as CalMarkers<MonthNamesV1Marker>>::Japanese>
+ DataProvider<<<R::D as DateDataMarkers>::Month as CalMarkers<MonthNamesV1Marker>>::JapaneseExtended>
+ DataProvider<<<R::D as DateDataMarkers>::Month as CalMarkers<MonthNamesV1Marker>>::Persian>
+ DataProvider<<<R::D as DateDataMarkers>::Month as CalMarkers<MonthNamesV1Marker>>::Roc>
+ DataProvider<<<R::D as DateDataMarkers>::Skel as CalMarkers<SkeletaV1Marker>>::Buddhist>
+ DataProvider<<<R::D as DateDataMarkers>::Skel as CalMarkers<SkeletaV1Marker>>::Chinese>
+ DataProvider<<<R::D as DateDataMarkers>::Skel as CalMarkers<SkeletaV1Marker>>::Coptic>
+ DataProvider<<<R::D as DateDataMarkers>::Skel as CalMarkers<SkeletaV1Marker>>::Dangi>
+ DataProvider<<<R::D as DateDataMarkers>::Skel as CalMarkers<SkeletaV1Marker>>::Ethiopian>
+ DataProvider<<<R::D as DateDataMarkers>::Skel as CalMarkers<SkeletaV1Marker>>::EthiopianAmeteAlem>
+ DataProvider<<<R::D as DateDataMarkers>::Skel as CalMarkers<SkeletaV1Marker>>::Gregorian>
+ DataProvider<<<R::D as DateDataMarkers>::Skel as CalMarkers<SkeletaV1Marker>>::Hebrew>
+ DataProvider<<<R::D as DateDataMarkers>::Skel as CalMarkers<SkeletaV1Marker>>::Indian>
+ DataProvider<<<R::D as DateDataMarkers>::Skel as CalMarkers<SkeletaV1Marker>>::IslamicCivil>
+ DataProvider<<<R::D as DateDataMarkers>::Skel as CalMarkers<SkeletaV1Marker>>::IslamicObservational>
+ DataProvider<<<R::D as DateDataMarkers>::Skel as CalMarkers<SkeletaV1Marker>>::IslamicTabular>
+ DataProvider<<<R::D as DateDataMarkers>::Skel as CalMarkers<SkeletaV1Marker>>::IslamicUmmAlQura>
+ DataProvider<<<R::D as DateDataMarkers>::Skel as CalMarkers<SkeletaV1Marker>>::Japanese>
+ DataProvider<<<R::D as DateDataMarkers>::Skel as CalMarkers<SkeletaV1Marker>>::JapaneseExtended>
+ DataProvider<<<R::D as DateDataMarkers>::Skel as CalMarkers<SkeletaV1Marker>>::Persian>
+ DataProvider<<<R::D as DateDataMarkers>::Skel as CalMarkers<SkeletaV1Marker>>::Roc>
+ DataProvider<<R::D as DateDataMarkers>::WeekdayNamesV1Marker>
+ DataProvider<<R::T as TimeMarkers>::DayPeriodNamesV1Marker>
+ DataProvider<<R::T as TimeMarkers>::TimeSkeletonPatternsV1Marker>
+ DataProvider<<R::Z as ZoneMarkers>::EssentialsV1Marker>
+ DataProvider<<R::Z as ZoneMarkers>::ExemplarCitiesV1Marker>
+ DataProvider<<R::Z as ZoneMarkers>::GenericLongV1Marker>
+ DataProvider<<R::Z as ZoneMarkers>::GenericShortV1Marker>
+ DataProvider<<R::Z as ZoneMarkers>::SpecificLongV1Marker>
+ DataProvider<<R::Z as ZoneMarkers>::SpecificShortV1Marker>
+ DataProvider<R::GluePatternV1Marker>,
{
Self::try_new_internal(
&crate::provider::Baked,
&ExternalLoaderCompiledData,
locale,
R::COMPONENTS,
options,
)
}
gen_any_buffer_constructors_with_external_loader!(
R,
try_new,
try_new_with_any_provider,
try_new_with_buffer_provider,
try_new_internal,
options: NeoOptions<R>
);
#[doc = icu_provider::gen_any_buffer_unstable_docs!(UNSTABLE, Self::try_new)]
pub fn try_new_unstable<P>(
provider: &P,
locale: &DataLocale,
options: NeoOptions<R>,
) -> Result<Self, LoadError>
where
P: ?Sized
+ DataProvider<<<R::D as DateDataMarkers>::Year as CalMarkers<YearNamesV1Marker>>::Buddhist>
+ DataProvider<<<R::D as DateDataMarkers>::Year as CalMarkers<YearNamesV1Marker>>::Chinese>
+ DataProvider<<<R::D as DateDataMarkers>::Year as CalMarkers<YearNamesV1Marker>>::Coptic>
+ DataProvider<<<R::D as DateDataMarkers>::Year as CalMarkers<YearNamesV1Marker>>::Dangi>
+ DataProvider<<<R::D as DateDataMarkers>::Year as CalMarkers<YearNamesV1Marker>>::Ethiopian>
+ DataProvider<<<R::D as DateDataMarkers>::Year as CalMarkers<YearNamesV1Marker>>::EthiopianAmeteAlem>
+ DataProvider<<<R::D as DateDataMarkers>::Year as CalMarkers<YearNamesV1Marker>>::Gregorian>
+ DataProvider<<<R::D as DateDataMarkers>::Year as CalMarkers<YearNamesV1Marker>>::Hebrew>
+ DataProvider<<<R::D as DateDataMarkers>::Year as CalMarkers<YearNamesV1Marker>>::Indian>
+ DataProvider<<<R::D as DateDataMarkers>::Year as CalMarkers<YearNamesV1Marker>>::IslamicCivil>
+ DataProvider<<<R::D as DateDataMarkers>::Year as CalMarkers<YearNamesV1Marker>>::IslamicObservational>
+ DataProvider<<<R::D as DateDataMarkers>::Year as CalMarkers<YearNamesV1Marker>>::IslamicTabular>
+ DataProvider<<<R::D as DateDataMarkers>::Year as CalMarkers<YearNamesV1Marker>>::IslamicUmmAlQura>
+ DataProvider<<<R::D as DateDataMarkers>::Year as CalMarkers<YearNamesV1Marker>>::Japanese>
+ DataProvider<<<R::D as DateDataMarkers>::Year as CalMarkers<YearNamesV1Marker>>::JapaneseExtended>
+ DataProvider<<<R::D as DateDataMarkers>::Year as CalMarkers<YearNamesV1Marker>>::Persian>
+ DataProvider<<<R::D as DateDataMarkers>::Year as CalMarkers<YearNamesV1Marker>>::Roc>
+ DataProvider<<<R::D as DateDataMarkers>::Month as CalMarkers<MonthNamesV1Marker>>::Buddhist>
+ DataProvider<<<R::D as DateDataMarkers>::Month as CalMarkers<MonthNamesV1Marker>>::Chinese>
+ DataProvider<<<R::D as DateDataMarkers>::Month as CalMarkers<MonthNamesV1Marker>>::Coptic>
+ DataProvider<<<R::D as DateDataMarkers>::Month as CalMarkers<MonthNamesV1Marker>>::Dangi>
+ DataProvider<<<R::D as DateDataMarkers>::Month as CalMarkers<MonthNamesV1Marker>>::Ethiopian>
+ DataProvider<<<R::D as DateDataMarkers>::Month as CalMarkers<MonthNamesV1Marker>>::EthiopianAmeteAlem>
+ DataProvider<<<R::D as DateDataMarkers>::Month as CalMarkers<MonthNamesV1Marker>>::Gregorian>
+ DataProvider<<<R::D as DateDataMarkers>::Month as CalMarkers<MonthNamesV1Marker>>::Hebrew>
+ DataProvider<<<R::D as DateDataMarkers>::Month as CalMarkers<MonthNamesV1Marker>>::Indian>
+ DataProvider<<<R::D as DateDataMarkers>::Month as CalMarkers<MonthNamesV1Marker>>::IslamicCivil>
+ DataProvider<<<R::D as DateDataMarkers>::Month as CalMarkers<MonthNamesV1Marker>>::IslamicObservational>
+ DataProvider<<<R::D as DateDataMarkers>::Month as CalMarkers<MonthNamesV1Marker>>::IslamicTabular>
+ DataProvider<<<R::D as DateDataMarkers>::Month as CalMarkers<MonthNamesV1Marker>>::IslamicUmmAlQura>
+ DataProvider<<<R::D as DateDataMarkers>::Month as CalMarkers<MonthNamesV1Marker>>::Japanese>
+ DataProvider<<<R::D as DateDataMarkers>::Month as CalMarkers<MonthNamesV1Marker>>::JapaneseExtended>
+ DataProvider<<<R::D as DateDataMarkers>::Month as CalMarkers<MonthNamesV1Marker>>::Persian>
+ DataProvider<<<R::D as DateDataMarkers>::Month as CalMarkers<MonthNamesV1Marker>>::Roc>
+ DataProvider<<<R::D as DateDataMarkers>::Skel as CalMarkers<SkeletaV1Marker>>::Buddhist>
+ DataProvider<<<R::D as DateDataMarkers>::Skel as CalMarkers<SkeletaV1Marker>>::Chinese>
+ DataProvider<<<R::D as DateDataMarkers>::Skel as CalMarkers<SkeletaV1Marker>>::Coptic>
+ DataProvider<<<R::D as DateDataMarkers>::Skel as CalMarkers<SkeletaV1Marker>>::Dangi>
+ DataProvider<<<R::D as DateDataMarkers>::Skel as CalMarkers<SkeletaV1Marker>>::Ethiopian>
+ DataProvider<<<R::D as DateDataMarkers>::Skel as CalMarkers<SkeletaV1Marker>>::EthiopianAmeteAlem>
+ DataProvider<<<R::D as DateDataMarkers>::Skel as CalMarkers<SkeletaV1Marker>>::Gregorian>
+ DataProvider<<<R::D as DateDataMarkers>::Skel as CalMarkers<SkeletaV1Marker>>::Hebrew>
+ DataProvider<<<R::D as DateDataMarkers>::Skel as CalMarkers<SkeletaV1Marker>>::Indian>
+ DataProvider<<<R::D as DateDataMarkers>::Skel as CalMarkers<SkeletaV1Marker>>::IslamicCivil>
+ DataProvider<<<R::D as DateDataMarkers>::Skel as CalMarkers<SkeletaV1Marker>>::IslamicObservational>
+ DataProvider<<<R::D as DateDataMarkers>::Skel as CalMarkers<SkeletaV1Marker>>::IslamicTabular>
+ DataProvider<<<R::D as DateDataMarkers>::Skel as CalMarkers<SkeletaV1Marker>>::IslamicUmmAlQura>
+ DataProvider<<<R::D as DateDataMarkers>::Skel as CalMarkers<SkeletaV1Marker>>::Japanese>
+ DataProvider<<<R::D as DateDataMarkers>::Skel as CalMarkers<SkeletaV1Marker>>::JapaneseExtended>
+ DataProvider<<<R::D as DateDataMarkers>::Skel as CalMarkers<SkeletaV1Marker>>::Persian>
+ DataProvider<<<R::D as DateDataMarkers>::Skel as CalMarkers<SkeletaV1Marker>>::Roc>
+ DataProvider<<R::D as DateDataMarkers>::WeekdayNamesV1Marker>
+ DataProvider<<R::T as TimeMarkers>::DayPeriodNamesV1Marker>
+ DataProvider<<R::T as TimeMarkers>::TimeSkeletonPatternsV1Marker>
+ DataProvider<<R::Z as ZoneMarkers>::EssentialsV1Marker>
+ DataProvider<<R::Z as ZoneMarkers>::ExemplarCitiesV1Marker>
+ DataProvider<<R::Z as ZoneMarkers>::GenericLongV1Marker>
+ DataProvider<<R::Z as ZoneMarkers>::GenericShortV1Marker>
+ DataProvider<<R::Z as ZoneMarkers>::SpecificLongV1Marker>
+ DataProvider<<R::Z as ZoneMarkers>::SpecificShortV1Marker>
+ DataProvider<R::GluePatternV1Marker>
+ DataProvider<ChineseCacheV1Marker>
+ DataProvider<DangiCacheV1Marker>
+ DataProvider<IslamicObservationalCacheV1Marker>
+ DataProvider<IslamicUmmAlQuraCacheV1Marker>
+ DataProvider<JapaneseErasV1Marker>
+ DataProvider<JapaneseExtendedErasV1Marker>
+ DataProvider<DecimalSymbolsV1Marker>
+ DataProvider<WeekDataV2Marker>,
{
Self::try_new_internal(
provider,
&ExternalLoaderUnstable(provider),
locale,
R::COMPONENTS,
options,
)
}
}
impl<R: DateTimeMarkers + IsRuntimeComponents> NeoFormatter<R>
where
R::D: DateDataMarkers,
R::T: TimeMarkers,
R::Z: ZoneMarkers,
{
#[cfg(feature = "compiled_data")]
pub fn try_new_with_components(locale: &DataLocale, components: R, options: NeoOptions<R>) -> Result<Self, LoadError>
where
crate::provider::Baked: Sized
+ DataProvider<<<R::D as DateDataMarkers>::Year as CalMarkers<YearNamesV1Marker>>::Buddhist>
+ DataProvider<<<R::D as DateDataMarkers>::Year as CalMarkers<YearNamesV1Marker>>::Chinese>
+ DataProvider<<<R::D as DateDataMarkers>::Year as CalMarkers<YearNamesV1Marker>>::Coptic>
+ DataProvider<<<R::D as DateDataMarkers>::Year as CalMarkers<YearNamesV1Marker>>::Dangi>
+ DataProvider<<<R::D as DateDataMarkers>::Year as CalMarkers<YearNamesV1Marker>>::Ethiopian>
+ DataProvider<<<R::D as DateDataMarkers>::Year as CalMarkers<YearNamesV1Marker>>::EthiopianAmeteAlem>
+ DataProvider<<<R::D as DateDataMarkers>::Year as CalMarkers<YearNamesV1Marker>>::Gregorian>
+ DataProvider<<<R::D as DateDataMarkers>::Year as CalMarkers<YearNamesV1Marker>>::Hebrew>
+ DataProvider<<<R::D as DateDataMarkers>::Year as CalMarkers<YearNamesV1Marker>>::Indian>
+ DataProvider<<<R::D as DateDataMarkers>::Year as CalMarkers<YearNamesV1Marker>>::IslamicCivil>
+ DataProvider<<<R::D as DateDataMarkers>::Year as CalMarkers<YearNamesV1Marker>>::IslamicObservational>
+ DataProvider<<<R::D as DateDataMarkers>::Year as CalMarkers<YearNamesV1Marker>>::IslamicTabular>
+ DataProvider<<<R::D as DateDataMarkers>::Year as CalMarkers<YearNamesV1Marker>>::IslamicUmmAlQura>
+ DataProvider<<<R::D as DateDataMarkers>::Year as CalMarkers<YearNamesV1Marker>>::Japanese>
+ DataProvider<<<R::D as DateDataMarkers>::Year as CalMarkers<YearNamesV1Marker>>::JapaneseExtended>
+ DataProvider<<<R::D as DateDataMarkers>::Year as CalMarkers<YearNamesV1Marker>>::Persian>
+ DataProvider<<<R::D as DateDataMarkers>::Year as CalMarkers<YearNamesV1Marker>>::Roc>
+ DataProvider<<<R::D as DateDataMarkers>::Month as CalMarkers<MonthNamesV1Marker>>::Buddhist>
+ DataProvider<<<R::D as DateDataMarkers>::Month as CalMarkers<MonthNamesV1Marker>>::Chinese>
+ DataProvider<<<R::D as DateDataMarkers>::Month as CalMarkers<MonthNamesV1Marker>>::Coptic>
+ DataProvider<<<R::D as DateDataMarkers>::Month as CalMarkers<MonthNamesV1Marker>>::Dangi>
+ DataProvider<<<R::D as DateDataMarkers>::Month as CalMarkers<MonthNamesV1Marker>>::Ethiopian>
+ DataProvider<<<R::D as DateDataMarkers>::Month as CalMarkers<MonthNamesV1Marker>>::EthiopianAmeteAlem>
+ DataProvider<<<R::D as DateDataMarkers>::Month as CalMarkers<MonthNamesV1Marker>>::Gregorian>
+ DataProvider<<<R::D as DateDataMarkers>::Month as CalMarkers<MonthNamesV1Marker>>::Hebrew>
+ DataProvider<<<R::D as DateDataMarkers>::Month as CalMarkers<MonthNamesV1Marker>>::Indian>
+ DataProvider<<<R::D as DateDataMarkers>::Month as CalMarkers<MonthNamesV1Marker>>::IslamicCivil>
+ DataProvider<<<R::D as DateDataMarkers>::Month as CalMarkers<MonthNamesV1Marker>>::IslamicObservational>
+ DataProvider<<<R::D as DateDataMarkers>::Month as CalMarkers<MonthNamesV1Marker>>::IslamicTabular>
+ DataProvider<<<R::D as DateDataMarkers>::Month as CalMarkers<MonthNamesV1Marker>>::IslamicUmmAlQura>
+ DataProvider<<<R::D as DateDataMarkers>::Month as CalMarkers<MonthNamesV1Marker>>::Japanese>
+ DataProvider<<<R::D as DateDataMarkers>::Month as CalMarkers<MonthNamesV1Marker>>::JapaneseExtended>
+ DataProvider<<<R::D as DateDataMarkers>::Month as CalMarkers<MonthNamesV1Marker>>::Persian>
+ DataProvider<<<R::D as DateDataMarkers>::Month as CalMarkers<MonthNamesV1Marker>>::Roc>
+ DataProvider<<<R::D as DateDataMarkers>::Skel as CalMarkers<SkeletaV1Marker>>::Buddhist>
+ DataProvider<<<R::D as DateDataMarkers>::Skel as CalMarkers<SkeletaV1Marker>>::Chinese>
+ DataProvider<<<R::D as DateDataMarkers>::Skel as CalMarkers<SkeletaV1Marker>>::Coptic>
+ DataProvider<<<R::D as DateDataMarkers>::Skel as CalMarkers<SkeletaV1Marker>>::Dangi>
+ DataProvider<<<R::D as DateDataMarkers>::Skel as CalMarkers<SkeletaV1Marker>>::Ethiopian>
+ DataProvider<<<R::D as DateDataMarkers>::Skel as CalMarkers<SkeletaV1Marker>>::EthiopianAmeteAlem>
+ DataProvider<<<R::D as DateDataMarkers>::Skel as CalMarkers<SkeletaV1Marker>>::Gregorian>
+ DataProvider<<<R::D as DateDataMarkers>::Skel as CalMarkers<SkeletaV1Marker>>::Hebrew>
+ DataProvider<<<R::D as DateDataMarkers>::Skel as CalMarkers<SkeletaV1Marker>>::Indian>
+ DataProvider<<<R::D as DateDataMarkers>::Skel as CalMarkers<SkeletaV1Marker>>::IslamicCivil>
+ DataProvider<<<R::D as DateDataMarkers>::Skel as CalMarkers<SkeletaV1Marker>>::IslamicObservational>
+ DataProvider<<<R::D as DateDataMarkers>::Skel as CalMarkers<SkeletaV1Marker>>::IslamicTabular>
+ DataProvider<<<R::D as DateDataMarkers>::Skel as CalMarkers<SkeletaV1Marker>>::IslamicUmmAlQura>
+ DataProvider<<<R::D as DateDataMarkers>::Skel as CalMarkers<SkeletaV1Marker>>::Japanese>
+ DataProvider<<<R::D as DateDataMarkers>::Skel as CalMarkers<SkeletaV1Marker>>::JapaneseExtended>
+ DataProvider<<<R::D as DateDataMarkers>::Skel as CalMarkers<SkeletaV1Marker>>::Persian>
+ DataProvider<<<R::D as DateDataMarkers>::Skel as CalMarkers<SkeletaV1Marker>>::Roc>
+ DataProvider<<R::D as DateDataMarkers>::WeekdayNamesV1Marker>
+ DataProvider<<R::T as TimeMarkers>::DayPeriodNamesV1Marker>
+ DataProvider<<R::T as TimeMarkers>::TimeSkeletonPatternsV1Marker>
+ DataProvider<<R::Z as ZoneMarkers>::EssentialsV1Marker>
+ DataProvider<<R::Z as ZoneMarkers>::ExemplarCitiesV1Marker>
+ DataProvider<<R::Z as ZoneMarkers>::GenericLongV1Marker>
+ DataProvider<<R::Z as ZoneMarkers>::GenericShortV1Marker>
+ DataProvider<<R::Z as ZoneMarkers>::SpecificLongV1Marker>
+ DataProvider<<R::Z as ZoneMarkers>::SpecificShortV1Marker>
+ DataProvider<R::GluePatternV1Marker>
{
Self::try_new_internal(
&crate::provider::Baked,
&ExternalLoaderCompiledData,
locale,
components.into(),
options,
)
}
gen_any_buffer_constructors_with_external_loader!(
try_new_with_components,
try_new_with_components_with_any_provider,
try_new_with_components_with_buffer_provider,
try_new_internal,
components: R,
options: NeoOptions<R>
);
#[doc = icu_provider::gen_any_buffer_unstable_docs!(UNSTABLE, Self::try_new)]
pub fn try_new_with_components_unstable<P>(
provider: &P,
locale: &DataLocale,
components: R,
options: NeoOptions<R>,
) -> Result<Self, LoadError>
where
P: ?Sized
+ DataProvider<<<R::D as DateDataMarkers>::Year as CalMarkers<YearNamesV1Marker>>::Buddhist>
+ DataProvider<<<R::D as DateDataMarkers>::Year as CalMarkers<YearNamesV1Marker>>::Chinese>
+ DataProvider<<<R::D as DateDataMarkers>::Year as CalMarkers<YearNamesV1Marker>>::Coptic>
+ DataProvider<<<R::D as DateDataMarkers>::Year as CalMarkers<YearNamesV1Marker>>::Dangi>
+ DataProvider<<<R::D as DateDataMarkers>::Year as CalMarkers<YearNamesV1Marker>>::Ethiopian>
+ DataProvider<<<R::D as DateDataMarkers>::Year as CalMarkers<YearNamesV1Marker>>::EthiopianAmeteAlem>
+ DataProvider<<<R::D as DateDataMarkers>::Year as CalMarkers<YearNamesV1Marker>>::Gregorian>
+ DataProvider<<<R::D as DateDataMarkers>::Year as CalMarkers<YearNamesV1Marker>>::Hebrew>
+ DataProvider<<<R::D as DateDataMarkers>::Year as CalMarkers<YearNamesV1Marker>>::Indian>
+ DataProvider<<<R::D as DateDataMarkers>::Year as CalMarkers<YearNamesV1Marker>>::IslamicCivil>
+ DataProvider<<<R::D as DateDataMarkers>::Year as CalMarkers<YearNamesV1Marker>>::IslamicObservational>
+ DataProvider<<<R::D as DateDataMarkers>::Year as CalMarkers<YearNamesV1Marker>>::IslamicTabular>
+ DataProvider<<<R::D as DateDataMarkers>::Year as CalMarkers<YearNamesV1Marker>>::IslamicUmmAlQura>
+ DataProvider<<<R::D as DateDataMarkers>::Year as CalMarkers<YearNamesV1Marker>>::Japanese>
+ DataProvider<<<R::D as DateDataMarkers>::Year as CalMarkers<YearNamesV1Marker>>::JapaneseExtended>
+ DataProvider<<<R::D as DateDataMarkers>::Year as CalMarkers<YearNamesV1Marker>>::Persian>
+ DataProvider<<<R::D as DateDataMarkers>::Year as CalMarkers<YearNamesV1Marker>>::Roc>
+ DataProvider<<<R::D as DateDataMarkers>::Month as CalMarkers<MonthNamesV1Marker>>::Buddhist>
+ DataProvider<<<R::D as DateDataMarkers>::Month as CalMarkers<MonthNamesV1Marker>>::Chinese>
+ DataProvider<<<R::D as DateDataMarkers>::Month as CalMarkers<MonthNamesV1Marker>>::Coptic>
+ DataProvider<<<R::D as DateDataMarkers>::Month as CalMarkers<MonthNamesV1Marker>>::Dangi>
+ DataProvider<<<R::D as DateDataMarkers>::Month as CalMarkers<MonthNamesV1Marker>>::Ethiopian>
+ DataProvider<<<R::D as DateDataMarkers>::Month as CalMarkers<MonthNamesV1Marker>>::EthiopianAmeteAlem>
+ DataProvider<<<R::D as DateDataMarkers>::Month as CalMarkers<MonthNamesV1Marker>>::Gregorian>
+ DataProvider<<<R::D as DateDataMarkers>::Month as CalMarkers<MonthNamesV1Marker>>::Hebrew>
+ DataProvider<<<R::D as DateDataMarkers>::Month as CalMarkers<MonthNamesV1Marker>>::Indian>
+ DataProvider<<<R::D as DateDataMarkers>::Month as CalMarkers<MonthNamesV1Marker>>::IslamicCivil>
+ DataProvider<<<R::D as DateDataMarkers>::Month as CalMarkers<MonthNamesV1Marker>>::IslamicObservational>
+ DataProvider<<<R::D as DateDataMarkers>::Month as CalMarkers<MonthNamesV1Marker>>::IslamicTabular>
+ DataProvider<<<R::D as DateDataMarkers>::Month as CalMarkers<MonthNamesV1Marker>>::IslamicUmmAlQura>
+ DataProvider<<<R::D as DateDataMarkers>::Month as CalMarkers<MonthNamesV1Marker>>::Japanese>
+ DataProvider<<<R::D as DateDataMarkers>::Month as CalMarkers<MonthNamesV1Marker>>::JapaneseExtended>
+ DataProvider<<<R::D as DateDataMarkers>::Month as CalMarkers<MonthNamesV1Marker>>::Persian>
+ DataProvider<<<R::D as DateDataMarkers>::Month as CalMarkers<MonthNamesV1Marker>>::Roc>
+ DataProvider<<<R::D as DateDataMarkers>::Skel as CalMarkers<SkeletaV1Marker>>::Buddhist>
+ DataProvider<<<R::D as DateDataMarkers>::Skel as CalMarkers<SkeletaV1Marker>>::Chinese>
+ DataProvider<<<R::D as DateDataMarkers>::Skel as CalMarkers<SkeletaV1Marker>>::Coptic>
+ DataProvider<<<R::D as DateDataMarkers>::Skel as CalMarkers<SkeletaV1Marker>>::Dangi>
+ DataProvider<<<R::D as DateDataMarkers>::Skel as CalMarkers<SkeletaV1Marker>>::Ethiopian>
+ DataProvider<<<R::D as DateDataMarkers>::Skel as CalMarkers<SkeletaV1Marker>>::EthiopianAmeteAlem>
+ DataProvider<<<R::D as DateDataMarkers>::Skel as CalMarkers<SkeletaV1Marker>>::Gregorian>
+ DataProvider<<<R::D as DateDataMarkers>::Skel as CalMarkers<SkeletaV1Marker>>::Hebrew>
+ DataProvider<<<R::D as DateDataMarkers>::Skel as CalMarkers<SkeletaV1Marker>>::Indian>
+ DataProvider<<<R::D as DateDataMarkers>::Skel as CalMarkers<SkeletaV1Marker>>::IslamicCivil>
+ DataProvider<<<R::D as DateDataMarkers>::Skel as CalMarkers<SkeletaV1Marker>>::IslamicObservational>
+ DataProvider<<<R::D as DateDataMarkers>::Skel as CalMarkers<SkeletaV1Marker>>::IslamicTabular>
+ DataProvider<<<R::D as DateDataMarkers>::Skel as CalMarkers<SkeletaV1Marker>>::IslamicUmmAlQura>
+ DataProvider<<<R::D as DateDataMarkers>::Skel as CalMarkers<SkeletaV1Marker>>::Japanese>
+ DataProvider<<<R::D as DateDataMarkers>::Skel as CalMarkers<SkeletaV1Marker>>::JapaneseExtended>
+ DataProvider<<<R::D as DateDataMarkers>::Skel as CalMarkers<SkeletaV1Marker>>::Persian>
+ DataProvider<<<R::D as DateDataMarkers>::Skel as CalMarkers<SkeletaV1Marker>>::Roc>
+ DataProvider<<R::D as DateDataMarkers>::WeekdayNamesV1Marker>
+ DataProvider<<R::T as TimeMarkers>::DayPeriodNamesV1Marker>
+ DataProvider<<R::T as TimeMarkers>::TimeSkeletonPatternsV1Marker>
+ DataProvider<<R::Z as ZoneMarkers>::EssentialsV1Marker>
+ DataProvider<<R::Z as ZoneMarkers>::ExemplarCitiesV1Marker>
+ DataProvider<<R::Z as ZoneMarkers>::GenericLongV1Marker>
+ DataProvider<<R::Z as ZoneMarkers>::GenericShortV1Marker>
+ DataProvider<<R::Z as ZoneMarkers>::SpecificLongV1Marker>
+ DataProvider<<R::Z as ZoneMarkers>::SpecificShortV1Marker>
+ DataProvider<R::GluePatternV1Marker>
+ DataProvider<ChineseCacheV1Marker>
+ DataProvider<DangiCacheV1Marker>
+ DataProvider<IslamicObservationalCacheV1Marker>
+ DataProvider<IslamicUmmAlQuraCacheV1Marker>
+ DataProvider<JapaneseErasV1Marker>
+ DataProvider<JapaneseExtendedErasV1Marker>
+ DataProvider<DecimalSymbolsV1Marker>
+ DataProvider<WeekDataV2Marker>,
{
Self::try_new_internal(
provider,
&ExternalLoaderUnstable(provider),
locale,
components.into(),
options,
)
}
}
impl<R: DateTimeMarkers> NeoFormatter<R>
where
R::D: DateDataMarkers,
R::T: TimeMarkers,
R::Z: ZoneMarkers,
{
fn try_new_internal<P, L>(
provider: &P,
loader: &L,
locale: &DataLocale,
components: NeoComponents,
options: NeoOptions<R>,
) -> Result<Self, LoadError>
where
P: ?Sized
+ DataProvider<<<R::D as DateDataMarkers>::Year as CalMarkers<YearNamesV1Marker>>::Buddhist>
+ DataProvider<<<R::D as DateDataMarkers>::Year as CalMarkers<YearNamesV1Marker>>::Chinese>
+ DataProvider<<<R::D as DateDataMarkers>::Year as CalMarkers<YearNamesV1Marker>>::Coptic>
+ DataProvider<<<R::D as DateDataMarkers>::Year as CalMarkers<YearNamesV1Marker>>::Dangi>
+ DataProvider<<<R::D as DateDataMarkers>::Year as CalMarkers<YearNamesV1Marker>>::Ethiopian>
+ DataProvider<<<R::D as DateDataMarkers>::Year as CalMarkers<YearNamesV1Marker>>::EthiopianAmeteAlem>
+ DataProvider<<<R::D as DateDataMarkers>::Year as CalMarkers<YearNamesV1Marker>>::Gregorian>
+ DataProvider<<<R::D as DateDataMarkers>::Year as CalMarkers<YearNamesV1Marker>>::Hebrew>
+ DataProvider<<<R::D as DateDataMarkers>::Year as CalMarkers<YearNamesV1Marker>>::Indian>
+ DataProvider<<<R::D as DateDataMarkers>::Year as CalMarkers<YearNamesV1Marker>>::IslamicCivil>
+ DataProvider<<<R::D as DateDataMarkers>::Year as CalMarkers<YearNamesV1Marker>>::IslamicObservational>
+ DataProvider<<<R::D as DateDataMarkers>::Year as CalMarkers<YearNamesV1Marker>>::IslamicTabular>
+ DataProvider<<<R::D as DateDataMarkers>::Year as CalMarkers<YearNamesV1Marker>>::IslamicUmmAlQura>
+ DataProvider<<<R::D as DateDataMarkers>::Year as CalMarkers<YearNamesV1Marker>>::Japanese>
+ DataProvider<<<R::D as DateDataMarkers>::Year as CalMarkers<YearNamesV1Marker>>::JapaneseExtended>
+ DataProvider<<<R::D as DateDataMarkers>::Year as CalMarkers<YearNamesV1Marker>>::Persian>
+ DataProvider<<<R::D as DateDataMarkers>::Year as CalMarkers<YearNamesV1Marker>>::Roc>
+ DataProvider<<<R::D as DateDataMarkers>::Month as CalMarkers<MonthNamesV1Marker>>::Buddhist>
+ DataProvider<<<R::D as DateDataMarkers>::Month as CalMarkers<MonthNamesV1Marker>>::Chinese>
+ DataProvider<<<R::D as DateDataMarkers>::Month as CalMarkers<MonthNamesV1Marker>>::Coptic>
+ DataProvider<<<R::D as DateDataMarkers>::Month as CalMarkers<MonthNamesV1Marker>>::Dangi>
+ DataProvider<<<R::D as DateDataMarkers>::Month as CalMarkers<MonthNamesV1Marker>>::Ethiopian>
+ DataProvider<<<R::D as DateDataMarkers>::Month as CalMarkers<MonthNamesV1Marker>>::EthiopianAmeteAlem>
+ DataProvider<<<R::D as DateDataMarkers>::Month as CalMarkers<MonthNamesV1Marker>>::Gregorian>
+ DataProvider<<<R::D as DateDataMarkers>::Month as CalMarkers<MonthNamesV1Marker>>::Hebrew>
+ DataProvider<<<R::D as DateDataMarkers>::Month as CalMarkers<MonthNamesV1Marker>>::Indian>
+ DataProvider<<<R::D as DateDataMarkers>::Month as CalMarkers<MonthNamesV1Marker>>::IslamicCivil>
+ DataProvider<<<R::D as DateDataMarkers>::Month as CalMarkers<MonthNamesV1Marker>>::IslamicObservational>
+ DataProvider<<<R::D as DateDataMarkers>::Month as CalMarkers<MonthNamesV1Marker>>::IslamicTabular>
+ DataProvider<<<R::D as DateDataMarkers>::Month as CalMarkers<MonthNamesV1Marker>>::IslamicUmmAlQura>
+ DataProvider<<<R::D as DateDataMarkers>::Month as CalMarkers<MonthNamesV1Marker>>::Japanese>
+ DataProvider<<<R::D as DateDataMarkers>::Month as CalMarkers<MonthNamesV1Marker>>::JapaneseExtended>
+ DataProvider<<<R::D as DateDataMarkers>::Month as CalMarkers<MonthNamesV1Marker>>::Persian>
+ DataProvider<<<R::D as DateDataMarkers>::Month as CalMarkers<MonthNamesV1Marker>>::Roc>
+ DataProvider<<<R::D as DateDataMarkers>::Skel as CalMarkers<SkeletaV1Marker>>::Buddhist>
+ DataProvider<<<R::D as DateDataMarkers>::Skel as CalMarkers<SkeletaV1Marker>>::Chinese>
+ DataProvider<<<R::D as DateDataMarkers>::Skel as CalMarkers<SkeletaV1Marker>>::Coptic>
+ DataProvider<<<R::D as DateDataMarkers>::Skel as CalMarkers<SkeletaV1Marker>>::Dangi>
+ DataProvider<<<R::D as DateDataMarkers>::Skel as CalMarkers<SkeletaV1Marker>>::Ethiopian>
+ DataProvider<<<R::D as DateDataMarkers>::Skel as CalMarkers<SkeletaV1Marker>>::EthiopianAmeteAlem>
+ DataProvider<<<R::D as DateDataMarkers>::Skel as CalMarkers<SkeletaV1Marker>>::Gregorian>
+ DataProvider<<<R::D as DateDataMarkers>::Skel as CalMarkers<SkeletaV1Marker>>::Hebrew>
+ DataProvider<<<R::D as DateDataMarkers>::Skel as CalMarkers<SkeletaV1Marker>>::Indian>
+ DataProvider<<<R::D as DateDataMarkers>::Skel as CalMarkers<SkeletaV1Marker>>::IslamicCivil>
+ DataProvider<<<R::D as DateDataMarkers>::Skel as CalMarkers<SkeletaV1Marker>>::IslamicObservational>
+ DataProvider<<<R::D as DateDataMarkers>::Skel as CalMarkers<SkeletaV1Marker>>::IslamicTabular>
+ DataProvider<<<R::D as DateDataMarkers>::Skel as CalMarkers<SkeletaV1Marker>>::IslamicUmmAlQura>
+ DataProvider<<<R::D as DateDataMarkers>::Skel as CalMarkers<SkeletaV1Marker>>::Japanese>
+ DataProvider<<<R::D as DateDataMarkers>::Skel as CalMarkers<SkeletaV1Marker>>::JapaneseExtended>
+ DataProvider<<<R::D as DateDataMarkers>::Skel as CalMarkers<SkeletaV1Marker>>::Persian>
+ DataProvider<<<R::D as DateDataMarkers>::Skel as CalMarkers<SkeletaV1Marker>>::Roc>
+ DataProvider<<R::D as DateDataMarkers>::WeekdayNamesV1Marker>
+ DataProvider<<R::T as TimeMarkers>::DayPeriodNamesV1Marker>
+ DataProvider<<R::T as TimeMarkers>::TimeSkeletonPatternsV1Marker>
+ DataProvider<<R::Z as ZoneMarkers>::EssentialsV1Marker>
+ DataProvider<<R::Z as ZoneMarkers>::ExemplarCitiesV1Marker>
+ DataProvider<<R::Z as ZoneMarkers>::GenericLongV1Marker>
+ DataProvider<<R::Z as ZoneMarkers>::GenericShortV1Marker>
+ DataProvider<<R::Z as ZoneMarkers>::SpecificLongV1Marker>
+ DataProvider<<R::Z as ZoneMarkers>::SpecificShortV1Marker>
+ DataProvider<R::GluePatternV1Marker>,
L: FixedDecimalFormatterLoader + WeekCalculatorLoader + AnyCalendarLoader,
{
let calendar = AnyCalendarLoader::load(loader, locale).map_err(LoadError::Data)?;
let kind = calendar.kind();
let hour_cycle = locale
.get_unicode_ext(&icu_locale_core::extensions::unicode::key!("hc"))
.as_ref()
.and_then(HourCycle::from_locale_value);
let selection = DateTimeZonePatternSelectionData::try_new_with_skeleton(
&AnyCalendarProvider::<<R::D as DateDataMarkers>::Skel, _>::new(provider, kind),
&<R::T as TimeMarkers>::TimeSkeletonPatternsV1Marker::bind(provider),
&R::GluePatternV1Marker::bind(provider),
locale,
options.length.into(),
components,
options.alignment.into(),
options.era_display.into(),
options.fractional_second_digits.into(),
hour_cycle,
)
.map_err(LoadError::Data)?;
let mut names = RawDateTimeNames::new_without_fixed_decimal_formatter();
names.load_for_pattern(
&AnyCalendarProvider::<<R::D as DateDataMarkers>::Year, _>::new(provider, kind),
&AnyCalendarProvider::<<R::D as DateDataMarkers>::Month, _>::new(provider, kind),
&<R::D as DateDataMarkers>::WeekdayNamesV1Marker::bind(provider),
&<R::T as TimeMarkers>::DayPeriodNamesV1Marker::bind(provider),
&<R::Z as ZoneMarkers>::EssentialsV1Marker::bind(provider),
&<R::Z as ZoneMarkers>::ExemplarCitiesV1Marker::bind(provider),
&<R::Z as ZoneMarkers>::GenericLongV1Marker::bind(provider),
&<R::Z as ZoneMarkers>::GenericShortV1Marker::bind(provider),
&<R::Z as ZoneMarkers>::SpecificLongV1Marker::bind(provider),
&<R::Z as ZoneMarkers>::SpecificShortV1Marker::bind(provider),
Some(loader), Some(loader), locale,
selection.pattern_items_for_data_loading(),
)?;
Ok(Self {
selection,
names,
calendar,
})
}
}
impl<R: DateTimeMarkers> NeoFormatter<R>
where
R::D: DateInputMarkers,
R::T: TimeMarkers,
R::Z: ZoneMarkers,
{
pub fn strict_format<I>(
&self,
datetime: &I,
) -> Result<FormattedNeoDateTime, crate::MismatchedCalendarError>
where
I: ?Sized + IsAnyCalendarKind + AllInputMarkers<R>,
{
if !datetime.is_any_calendar_kind(self.calendar.kind()) {
return Err(crate::MismatchedCalendarError {
this_kind: self.calendar.kind(),
date_kind:
NeoGetField::<<R::D as DateInputMarkers>::AnyCalendarKindInput>::get_field(
datetime,
)
.into(),
});
}
let datetime = ExtractedInput::extract_from_neo_input::<R::D, R::T, R::Z, I>(datetime);
Ok(FormattedNeoDateTime {
pattern: self.selection.select(&datetime),
input: datetime,
names: self.names.as_borrowed(),
})
}
pub fn convert_and_format<'a, I>(&'a self, datetime: &I) -> FormattedNeoDateTime
where
I: ?Sized + ConvertCalendar,
I::Converted<'a>: Sized + AllInputMarkers<R>,
{
let datetime = datetime.to_calendar(&self.calendar);
let datetime =
ExtractedInput::extract_from_neo_input::<R::D, R::T, R::Z, I::Converted<'a>>(&datetime);
FormattedNeoDateTime {
pattern: self.selection.select(&datetime),
input: datetime,
names: self.names.as_borrowed(),
}
}
}
#[derive(Debug)]
pub struct FormattedNeoDateTime<'a> {
pattern: DateTimeZonePatternDataBorrowed<'a>,
input: ExtractedInput,
names: RawDateTimeNamesBorrowed<'a>,
}
impl<'a> TryWriteable for FormattedNeoDateTime<'a> {
type Error = DateTimeWriteError;
fn try_write_to_parts<S: writeable::PartsWrite + ?Sized>(
&self,
sink: &mut S,
) -> Result<Result<(), Self::Error>, fmt::Error> {
try_write_pattern_items(
self.pattern.metadata(),
self.pattern.iter_items(),
&self.input,
Some(&self.names),
Some(&self.names),
Some(&self.names),
self.names.week_calculator,
self.names.fixed_decimal_formatter,
sink,
)
}
}
impl<'a> FormattedNeoDateTime<'a> {
pub fn pattern(&self) -> DateTimePattern {
self.pattern.to_pattern()
}
pub fn to_string_lossy(&self) -> alloc::string::String {
match self.try_write_to_string() {
Err((_, s)) | Ok(s) => s.into_owned(),
}
}
}