use crate::{
pattern::runtime::PatternPlurals,
skeleton::{reference::Skeleton, SkeletonError},
};
use core::convert::TryFrom;
use icu_provider::prelude::*;
use litemap::LiteMap;
size_test!(DateSkeletonPatternsV1, date_skeleton_patterns_v1_size, 24);
#[doc = date_skeleton_patterns_v1_size!()]
#[icu_provider::data_struct(marker(
DateSkeletonPatternsV1Marker,
"datetime/skeletons@1",
fallback_by = "language",
extension_key = "ca",
))]
#[derive(Debug, PartialEq, Clone, Default)]
#[cfg_attr(feature = "datagen", derive(serde::Serialize))]
#[cfg_attr(feature = "serde", derive(serde::Deserialize))]
pub struct DateSkeletonPatternsV1<'data>(
#[cfg_attr(feature = "serde", serde(borrow))]
#[zerofrom(clone)]
pub LiteMap<SkeletonV1, PatternPlurals<'data>>,
);
#[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Clone)]
#[cfg_attr(feature = "datagen", derive(serde::Serialize))]
#[cfg_attr(feature = "serde", derive(serde::Deserialize))]
pub struct SkeletonV1(pub Skeleton);
impl TryFrom<&str> for SkeletonV1 {
type Error = SkeletonError;
fn try_from(skeleton_string: &str) -> Result<Self, Self::Error> {
match Skeleton::try_from(skeleton_string) {
Ok(skeleton) => Ok(Self(skeleton)),
Err(err) => Err(err),
}
}
}
#[cfg(feature = "datagen")]
impl databake::Bake for DateSkeletonPatternsV1<'_> {
fn bake(&self, env: &databake::CrateEnv) -> databake::TokenStream {
use zerofrom::ZeroFrom;
env.insert("icu_datetime");
databake::Bake::bake(
&self
.0
.iter()
.map(|(skeleton, pattern)| {
(skeleton.0 .0.as_slice(), PatternPlurals::zero_from(pattern))
})
.collect::<Vec<_>>()
.as_slice(),
env,
)
}
}
#[cfg(feature = "datagen")]
impl Default for DateSkeletonPatternsV1Marker {
fn default() -> Self {
Self
}
}
#[cfg(feature = "datagen")]
impl databake::Bake for DateSkeletonPatternsV1Marker {
fn bake(&self, env: &databake::CrateEnv) -> databake::TokenStream {
env.insert("icu_datetime");
databake::quote! {
icu_datetime::provider::calendar::DateSkeletonPatternsV1Marker
}
}
}