#![cfg_attr(not(any(test, feature = "std")), no_std)]
#![cfg_attr(
not(test),
deny(
clippy::indexing_slicing,
clippy::unwrap_used,
clippy::expect_used,
clippy::panic,
clippy::exhaustive_structs,
clippy::exhaustive_enums,
missing_debug_implementations,
)
)]
#![warn(missing_docs)]
extern crate alloc;
mod calendar;
mod datetime;
mod error;
pub mod fields;
mod format;
pub mod input;
pub mod options;
#[doc(hidden)]
pub mod pattern;
pub mod provider;
pub(crate) mod raw;
#[doc(hidden)]
#[allow(clippy::exhaustive_structs, clippy::exhaustive_enums)] #[cfg(any(feature = "datagen", feature = "experimental"))]
pub mod skeleton;
pub mod time_zone;
mod zoned_datetime;
mod any;
pub use any::{DateFormatter, DateTimeFormatter, ZonedDateTimeFormatter};
pub use calendar::CldrCalendar;
pub use datetime::{TimeFormatter, TypedDateFormatter, TypedDateTimeFormatter};
pub use error::DateTimeError;
pub use format::datetime::FormattedDateTime;
pub use format::time_zone::FormattedTimeZone;
pub use format::zoned_datetime::FormattedZonedDateTime;
pub use options::DateTimeFormatterOptions;
pub use zoned_datetime::TypedZonedDateTimeFormatter;
#[doc(no_inline)]
pub use DateTimeError as Error;
#[cfg(test)]
mod tests {
use super::*;
use core::mem::size_of;
use icu_calendar::week::WeekCalculator;
use icu_calendar::Gregorian;
use icu_decimal::FixedDecimalFormatter;
use icu_plurals::PluralRules;
use icu_provider::prelude::*;
use icu_timezone::CustomTimeZone;
use provider::calendar::patterns::GenericPatternV1Marker;
use provider::calendar::patterns::PatternPluralsFromPatternsV1Marker;
use provider::calendar::ErasedDateSymbolsV1Marker;
use provider::calendar::TimeSymbolsV1Marker;
use provider::time_zones::ExemplarCitiesV1Marker;
use provider::time_zones::MetazoneGenericNamesLongV1Marker;
use provider::time_zones::MetazoneGenericNamesShortV1Marker;
use provider::time_zones::MetazoneSpecificNamesLongV1Marker;
use provider::time_zones::MetazoneSpecificNamesShortV1Marker;
use provider::time_zones::TimeZoneFormatsV1Marker;
use time_zone::TimeZoneDataPayloads;
use time_zone::TimeZoneFormatter;
use time_zone::TimeZoneFormatterUnit;
macro_rules! check_size_of {
($sizes:pat, $type:path) => {
assert!(
matches!(size_of::<$type>(), $sizes),
concat!(stringify!($type), " is of size {}"),
size_of::<$type>()
);
};
}
#[test]
fn check_sizes() {
check_size_of!(4616, DateFormatter);
check_size_of!(5488, DateTimeFormatter);
check_size_of!(6536, ZonedDateTimeFormatter);
check_size_of!(1344, TimeFormatter);
check_size_of!(1048, TimeZoneFormatter);
check_size_of!(4568, TypedDateFormatter::<Gregorian>);
check_size_of!(5440, TypedDateTimeFormatter::<Gregorian>);
check_size_of!(88, DateTimeError);
check_size_of!(184, FormattedDateTime);
check_size_of!(16, FormattedTimeZone::<CustomTimeZone>);
check_size_of!(168, FormattedZonedDateTime);
if cfg!(feature = "experimental") {
check_size_of!(13, DateTimeFormatterOptions);
}
type DP<M> = DataPayload<M>;
check_size_of!(216, DP::<PatternPluralsFromPatternsV1Marker>);
check_size_of!(1032 | 912, DP::<TimeSymbolsV1Marker>);
check_size_of!(40, DP::<GenericPatternV1Marker>);
check_size_of!(216, DP::<PatternPluralsFromPatternsV1Marker>);
check_size_of!(5064 | 3912, DP::<ErasedDateSymbolsV1Marker>);
check_size_of!(232 | 240, DP::<TimeZoneFormatsV1Marker>);
check_size_of!(64, DP::<ExemplarCitiesV1Marker>);
check_size_of!(120 | 112, DP::<MetazoneGenericNamesLongV1Marker>);
check_size_of!(120 | 112, DP::<MetazoneGenericNamesShortV1Marker>);
check_size_of!(216 | 208, DP::<MetazoneSpecificNamesLongV1Marker>);
check_size_of!(216 | 208, DP::<MetazoneSpecificNamesShortV1Marker>);
check_size_of!(2, WeekCalculator);
check_size_of!(176, PluralRules);
check_size_of!(256 | 216, FixedDecimalFormatter);
check_size_of!(1024 | 936, TimeZoneDataPayloads);
check_size_of!(3, TimeZoneFormatterUnit);
}
}