use alloc::borrow::Cow;
use icu_pattern::{DoublePlaceholderPattern, SinglePlaceholderPattern};
use icu_provider::prelude::*;
use zerovec::{ule::NichedOption, ZeroMap, ZeroMap2d, ZeroVec};
use icu_time::{provider::MinutesSinceEpoch, zone::TimeZoneVariant, TimeZone};
pub(crate) mod tz {
pub(crate) use super::ExemplarCities;
pub(crate) use super::ExemplarCitiesRootV1;
pub(crate) use super::ExemplarCitiesV1;
pub(crate) use super::Locations;
pub(crate) use super::LocationsRootV1;
pub(crate) use super::LocationsV1;
pub(crate) use super::MetazoneGenericNames as MzGeneric;
pub(crate) use super::MetazoneGenericNamesLongV1 as MzGenericLongV1;
pub(crate) use super::MetazoneGenericNamesShortV1 as MzGenericShortV1;
pub(crate) use super::MetazonePeriod as MzPeriod;
pub(crate) use super::MetazonePeriodV1 as MzPeriodV1;
pub(crate) use super::MetazoneSpecificNames as MzSpecific;
pub(crate) use super::MetazoneSpecificNamesLongV1 as MzSpecificLongV1;
pub(crate) use super::MetazoneSpecificNamesShortV1 as MzSpecificShortV1;
pub(crate) use super::MetazoneStandardNamesLongV1 as MzStandardLongV1;
pub(crate) use super::TimeZoneEssentials as Essentials;
pub(crate) use super::TimeZoneEssentialsV1 as EssentialsV1;
}
icu_provider::data_marker!(
TimeZoneEssentialsV1,
TimeZoneEssentials<'static>
);
icu_provider::data_marker!(
LocationsV1,
Locations<'static>
);
icu_provider::data_marker!(
LocationsRootV1,
Locations<'static>
);
icu_provider::data_marker!(
ExemplarCitiesV1,
ExemplarCities<'static>
);
icu_provider::data_marker!(
ExemplarCitiesRootV1,
ExemplarCities<'static>
);
icu_provider::data_marker!(
MetazoneGenericNamesLongV1,
MetazoneGenericNames<'static>,
has_checksum = true
);
icu_provider::data_marker!(
MetazoneGenericNamesShortV1,
MetazoneGenericNames<'static>,
has_checksum = true
);
icu_provider::data_marker!(
MetazoneStandardNamesLongV1,
MetazoneGenericNames<'static>,
has_checksum = true
);
icu_provider::data_marker!(
MetazoneSpecificNamesLongV1,
MetazoneSpecificNames<'static>,
has_checksum = true
);
icu_provider::data_marker!(
MetazoneSpecificNamesShortV1,
MetazoneSpecificNames<'static>,
has_checksum = true,
);
icu_provider::data_marker!(
MetazonePeriodV1,
MetazonePeriod<'static>,
is_singleton = true,
has_checksum = true
);
#[derive(PartialEq, Debug, Clone, Default, yoke::Yokeable, zerofrom::ZeroFrom)]
#[cfg_attr(feature = "datagen", derive(serde::Serialize, databake::Bake))]
#[cfg_attr(feature = "datagen", databake(path = icu_datetime::provider::time_zones))]
#[cfg_attr(feature = "serde", derive(serde::Deserialize))]
#[yoke(prove_covariance_manually)]
pub struct TimeZoneEssentials<'data> {
#[cfg_attr(feature = "serde", serde(borrow,))]
pub offset_separator: Cow<'data, str>,
#[cfg_attr(
feature = "serde",
serde(
borrow,
deserialize_with = "icu_pattern::deserialize_borrowed_cow::<icu_pattern::SinglePlaceholder, _>"
)
)]
pub offset_pattern: Cow<'data, SinglePlaceholderPattern>,
#[cfg_attr(feature = "serde", serde(borrow))]
pub offset_zero: Cow<'data, str>,
#[cfg_attr(feature = "serde", serde(borrow))]
pub offset_unknown: Cow<'data, str>,
}
icu_provider::data_struct!(
TimeZoneEssentials<'_>,
#[cfg(feature = "datagen")]
);
#[derive(PartialEq, Debug, Clone, Default, yoke::Yokeable, zerofrom::ZeroFrom)]
#[cfg_attr(feature = "datagen", derive(serde::Serialize, databake::Bake))]
#[cfg_attr(feature = "datagen", databake(path = icu_datetime::provider::time_zones))]
#[cfg_attr(feature = "serde", derive(serde::Deserialize))]
#[yoke(prove_covariance_manually)]
pub struct Locations<'data> {
#[cfg_attr(feature = "serde", serde(borrow))]
pub locations: ZeroMap<'data, TimeZone, str>,
#[cfg_attr(
feature = "serde",
serde(
borrow,
deserialize_with = "icu_pattern::deserialize_borrowed_cow::<icu_pattern::SinglePlaceholder, _>"
)
)]
pub pattern_generic: Cow<'data, SinglePlaceholderPattern>,
#[cfg_attr(
feature = "serde",
serde(
borrow,
deserialize_with = "icu_pattern::deserialize_borrowed_cow::<icu_pattern::SinglePlaceholder, _>"
)
)]
pub pattern_standard: Cow<'data, SinglePlaceholderPattern>,
#[cfg_attr(
feature = "serde",
serde(
borrow,
deserialize_with = "icu_pattern::deserialize_borrowed_cow::<icu_pattern::SinglePlaceholder, _>"
)
)]
pub pattern_daylight: Cow<'data, SinglePlaceholderPattern>,
#[cfg_attr(
feature = "serde",
serde(
borrow,
deserialize_with = "icu_pattern::deserialize_borrowed_cow::<icu_pattern::DoublePlaceholder, _>"
)
)]
pub pattern_partial_location: Cow<'data, DoublePlaceholderPattern>,
}
icu_provider::data_struct!(
Locations<'_>,
#[cfg(feature = "datagen")]
);
#[derive(PartialEq, Debug, Clone, Default, yoke::Yokeable, zerofrom::ZeroFrom)]
#[cfg_attr(feature = "datagen", derive(serde::Serialize, databake::Bake))]
#[cfg_attr(feature = "datagen", databake(path = icu_datetime::provider::time_zones))]
#[cfg_attr(feature = "serde", derive(serde::Deserialize))]
#[yoke(prove_covariance_manually)]
pub struct ExemplarCities<'data> {
#[cfg_attr(feature = "serde", serde(borrow))]
pub exemplars: ZeroMap<'data, TimeZone, str>,
}
icu_provider::data_struct!(
ExemplarCities<'_>,
#[cfg(feature = "datagen")]
);
#[derive(PartialEq, Debug, Clone, Default, yoke::Yokeable, zerofrom::ZeroFrom)]
#[cfg_attr(feature = "datagen", derive(serde::Serialize, databake::Bake))]
#[cfg_attr(feature = "datagen", databake(path = icu_datetime::provider::time_zones))]
#[cfg_attr(feature = "serde", derive(serde::Deserialize))]
#[yoke(prove_covariance_manually)]
pub struct MetazoneGenericNames<'data> {
#[cfg_attr(feature = "serde", serde(borrow))]
pub defaults: ZeroMap<'data, MetazoneId, str>,
#[cfg_attr(feature = "serde", serde(borrow))]
pub overrides: ZeroMap<'data, TimeZone, str>,
}
icu_provider::data_struct!(
MetazoneGenericNames<'_>,
#[cfg(feature = "datagen")]
);
#[derive(PartialEq, Debug, Clone, Default, yoke::Yokeable, zerofrom::ZeroFrom)]
#[cfg_attr(feature = "datagen", derive(serde::Serialize, databake::Bake))]
#[cfg_attr(feature = "datagen", databake(path = icu_datetime::provider::time_zones))]
#[cfg_attr(feature = "serde", derive(serde::Deserialize))]
#[yoke(prove_covariance_manually)]
pub struct MetazoneSpecificNames<'data> {
#[cfg_attr(feature = "serde", serde(borrow))]
pub defaults: ZeroMap<'data, (MetazoneId, TimeZoneVariant), str>,
#[cfg_attr(feature = "serde", serde(borrow))]
pub overrides: ZeroMap<'data, (TimeZone, TimeZoneVariant), str>,
#[cfg_attr(feature = "serde", serde(borrow))]
pub use_standard: ZeroVec<'data, MetazoneId>,
}
icu_provider::data_struct!(
MetazoneSpecificNames<'_>,
#[cfg(feature = "datagen")]
);
pub type MetazoneId = core::num::NonZeroU8;
#[derive(PartialEq, Debug, Clone, Default, yoke::Yokeable, zerofrom::ZeroFrom)]
#[cfg_attr(feature = "datagen", derive(serde::Serialize, databake::Bake))]
#[cfg_attr(feature = "datagen", databake(path = icu_datetime::provider::time_zones))]
#[cfg_attr(feature = "serde", derive(serde::Deserialize))]
#[yoke(prove_covariance_manually)]
pub struct MetazonePeriod<'data> {
#[cfg_attr(feature = "serde", serde(borrow))]
pub list: ZeroMap2d<'data, TimeZone, MinutesSinceEpoch, NichedOption<MetazoneId, 1>>,
}
icu_provider::data_struct!(
MetazonePeriod<'_>,
#[cfg(feature = "datagen")]
);