use crate::TimeZoneBcp47Id;
use icu_provider::prelude::*;
use zerotrie::{ZeroAsciiIgnoreCaseTrie, ZeroTrie};
use zerovec::{VarZeroVec, ZeroVec};
#[derive(Debug, Clone, PartialEq)]
#[icu_provider::data_struct(marker(
IanaToBcp47MapV1Marker,
"time_zone/iana_to_bcp47@1",
singleton
))]
#[cfg_attr(feature = "datagen", derive(serde::Serialize, databake::Bake))]
#[cfg_attr(feature = "datagen", databake(path = icu_timezone::provider::names))]
#[cfg_attr(feature = "serde", derive(serde::Deserialize))]
#[yoke(prove_covariance_manually)]
pub struct IanaToBcp47MapV1<'data> {
#[cfg_attr(feature = "serde", serde(borrow))]
pub map: ZeroTrie<ZeroVec<'data, u8>>,
#[cfg_attr(feature = "serde", serde(borrow))]
pub bcp47_ids: ZeroVec<'data, TimeZoneBcp47Id>,
pub bcp47_ids_checksum: u64,
}
pub const NON_REGION_CITY_PREFIX: u8 = b'_';
#[derive(Debug, Clone, PartialEq)]
#[icu_provider::data_struct(marker(
IanaToBcp47MapV3Marker,
"time_zone/iana_to_bcp47@3",
singleton
))]
#[cfg_attr(feature = "datagen", derive(serde::Serialize, databake::Bake))]
#[cfg_attr(feature = "datagen", databake(path = icu_timezone::provider::names))]
#[cfg_attr(feature = "serde", derive(serde::Deserialize))]
pub struct IanaToBcp47MapV3<'data> {
#[cfg_attr(feature = "serde", serde(borrow))]
pub map: ZeroAsciiIgnoreCaseTrie<ZeroVec<'data, u8>>,
#[cfg_attr(feature = "serde", serde(borrow))]
pub bcp47_ids: ZeroVec<'data, TimeZoneBcp47Id>,
pub bcp47_ids_checksum: u64,
}
#[derive(Debug, Clone, PartialEq)]
#[icu_provider::data_struct(marker(
Bcp47ToIanaMapV1Marker,
"time_zone/bcp47_to_iana@1",
singleton
))]
#[cfg_attr(feature = "datagen", derive(serde::Serialize, databake::Bake))]
#[cfg_attr(feature = "datagen", databake(path = icu_timezone::provider::names))]
#[cfg_attr(feature = "serde", derive(serde::Deserialize))]
#[yoke(prove_covariance_manually)]
pub struct Bcp47ToIanaMapV1<'data> {
pub bcp47_ids_checksum: u64,
#[cfg_attr(feature = "serde", serde(borrow))]
pub canonical_iana_ids: VarZeroVec<'data, str>,
}