use crate::TimeZone;
use icu_provider::prelude::*;
use zerotrie::ZeroAsciiIgnoreCaseTrie;
use zerovec::{VarZeroVec, ZeroVec};
pub const NON_REGION_CITY_PREFIX: u8 = b'_';
icu_provider::data_marker!(
TimezoneIdentifiersIanaCoreV1,
"timezone/identifiers/iana/core/v1",
IanaToBcp47Map<'static>,
is_singleton = true,
has_checksum = true,
);
icu_provider::data_marker!(
TimezoneIdentifiersIanaExtendedV1,
"timezone/identifiers/iana/extended/v1",
IanaNames<'static>,
is_singleton = true,
has_checksum = true,
);
#[derive(Debug, Clone, PartialEq, zerofrom::ZeroFrom, yoke::Yokeable)]
#[cfg_attr(feature = "datagen", derive(serde::Serialize, databake::Bake))]
#[cfg_attr(feature = "datagen", databake(path = icu_time::provider::iana))]
#[cfg_attr(feature = "serde", derive(serde::Deserialize))]
pub struct IanaToBcp47Map<'data> {
#[cfg_attr(feature = "serde", serde(borrow))]
pub map: ZeroAsciiIgnoreCaseTrie<ZeroVec<'data, u8>>,
#[cfg_attr(feature = "serde", serde(borrow))]
pub bcp47_ids: ZeroVec<'data, TimeZone>,
}
icu_provider::data_struct!(
IanaToBcp47Map<'_>,
#[cfg(feature = "datagen")]
);
#[derive(Debug, Clone, PartialEq, zerofrom::ZeroFrom, yoke::Yokeable)]
#[cfg_attr(feature = "datagen", derive(serde::Serialize, databake::Bake))]
#[cfg_attr(feature = "datagen", databake(path = icu_time::provider::iana))]
#[cfg_attr(feature = "serde", derive(serde::Deserialize))]
#[yoke(prove_covariance_manually)]
pub struct IanaNames<'data> {
#[cfg_attr(feature = "serde", serde(borrow))]
pub normalized_iana_ids: VarZeroVec<'data, str>,
}
icu_provider::data_struct!(
IanaNames<'_>,
#[cfg(feature = "datagen")]
);