mod formatter;
mod names;
#[expect(clippy::module_inception)] mod pattern;
pub use crate::error::ErrorField;
use crate::unchecked::MissingInputFieldKind;
pub use formatter::DateTimePatternFormatter;
pub use formatter::FormattedDateTimePattern;
use icu_calendar::types::MonthCode;
use icu_calendar::AnyCalendarKind;
use icu_pattern::SinglePlaceholderPattern;
pub use names::DateTimeNames;
pub(crate) use names::DateTimeNamesMetadata;
pub use names::DayPeriodNameLength;
pub use names::FixedCalendarDateTimeNames;
pub use names::MonthNameLength;
pub(crate) use names::RawDateTimeNames;
pub(crate) use names::RawDateTimeNamesBorrowed;
pub(crate) use names::TimeZoneDataPayloadsBorrowed;
pub use names::WeekdayNameLength;
pub use names::YearNameLength;
pub use pattern::DateTimePattern;
use tinystr::TinyStr16;
#[cfg(doc)]
use icu_calendar::types::CyclicYear;
#[cfg(doc)]
use icu_decimal::DecimalFormatter;
#[cfg(doc)]
use writeable::TryWriteable;
pub(crate) enum GetNameForMonthError {
InvalidMonthCode,
InvalidFieldLength,
NotLoaded,
}
pub(crate) enum GetNameForWeekdayError {
InvalidFieldLength,
NotLoaded,
}
pub(crate) enum GetNameForEraError {
InvalidEraCode,
InvalidFieldLength,
NotLoaded,
}
pub(crate) enum GetNameForCyclicYearError {
InvalidYearNumber { max: u8 },
InvalidFieldLength,
NotLoaded,
}
pub(crate) enum GetNameForDayPeriodError {
InvalidFieldLength,
NotLoaded,
}
pub(crate) enum MonthPlaceholderValue<'a> {
PlainString(&'a str),
Numeric,
NumericPattern(&'a SinglePlaceholderPattern),
StringPattern(&'a str, &'a SinglePlaceholderPattern),
}
#[derive(Debug, Clone, Copy, PartialEq, displaydoc::Display)]
#[non_exhaustive]
pub enum PatternLoadError {
#[displaydoc("A field {field:?} conflicts with a previously loaded field {previous_field:?}.")]
ConflictingField {
field: ErrorField,
previous_field: ErrorField,
},
#[displaydoc("The field {0:?} symbol is not supported in that length.")]
UnsupportedLength(ErrorField),
#[displaydoc("The specific formatter does not support the field {0:?}.")]
FormatterTooSpecific(ErrorField),
#[displaydoc("Problem loading data for field {1:?}: {0}")]
Data(icu_provider::DataError, ErrorField),
}
impl core::error::Error for PatternLoadError {}
#[derive(Debug, Clone, Copy, PartialEq, displaydoc::Display)]
#[displaydoc("The calendar {kind:?} is not supported in DateTimeFormatter")]
#[non_exhaustive]
pub struct UnsupportedCalendarError {
pub kind: AnyCalendarKind,
}
impl core::error::Error for UnsupportedCalendarError {}
#[non_exhaustive]
#[derive(Debug, PartialEq, Copy, Clone, displaydoc::Display)]
pub enum FormattedDateTimePatternError {
#[displaydoc("Invalid month {0:?}")]
InvalidMonthCode(MonthCode),
#[displaydoc("Invalid era {0:?}")]
InvalidEra(TinyStr16),
#[displaydoc("Invalid cyclic year {value} (maximum {max})")]
InvalidCyclicYear {
value: u8,
max: u8,
},
#[displaydoc("Names for {0:?} not loaded")]
NamesNotLoaded(ErrorField),
#[displaydoc("DecimalFormatter not loaded")]
DecimalFormatterNotLoaded,
#[displaydoc("Incomplete input, missing value for {0:?}")]
MissingInputField(MissingInputFieldKind),
#[displaydoc("Unsupported field {0:?}")]
UnsupportedField(ErrorField),
#[displaydoc("Field length for {0:?} is invalid")]
UnsupportedLength(ErrorField),
}