use icu_plurals::provider::PluralElementsPackedCow;
use icu_provider::prelude::*;
#[cfg(feature = "compiled_data")]
pub use crate::provider::Baked;
icu_provider::data_marker!(
CurrencyExtendedDataV1,
CurrencyExtendedData<'static>,
#[cfg(feature = "datagen")]
attributes_domain = "currency",
);
#[derive(Debug, Clone, PartialEq, yoke::Yokeable, zerofrom::ZeroFrom)]
#[cfg_attr(feature = "serde", derive(serde::Deserialize))]
#[cfg_attr(feature = "datagen", derive(serde::Serialize))]
#[yoke(prove_covariance_manually)]
pub struct CurrencyExtendedData<'data> {
#[cfg_attr(feature = "serde", serde(borrow))]
pub display_names: PluralElementsPackedCow<'data, str>,
}
icu_provider::data_struct!(CurrencyExtendedData<'_>, #[cfg(feature = "datagen")]);
impl<'data> CurrencyExtendedData<'data> {
pub const unsafe fn from_bytes_unchecked(bytes: &'data [u8]) -> Self {
Self {
display_names: PluralElementsPackedCow {
elements: alloc::borrow::Cow::Borrowed(
icu_plurals::provider::PluralElementsPackedULE::from_bytes_unchecked(bytes),
),
},
}
}
}
#[cfg(feature = "datagen")]
impl databake::Bake for CurrencyExtendedData<'_> {
fn bake(&self, ctx: &databake::CrateEnv) -> databake::TokenStream {
use zerovec::ule::VarULE;
ctx.insert("icu_experimental::dimension::provider::currency");
let bytes = self.display_names.elements.as_bytes().bake(ctx);
databake::quote! { unsafe {
icu_experimental::dimension::provider::currency::extended::CurrencyExtendedData::from_bytes_unchecked(#bytes)
}}
}
}
#[cfg(feature = "datagen")]
impl databake::BakeSize for CurrencyExtendedData<'_> {
fn borrows_size(&self) -> usize {
self.display_names.borrows_size()
}
}