use icu_provider::prelude::*;
use tinystr::UnvalidatedTinyAsciiStr;
use zerovec::ZeroMap;
#[cfg(feature = "compiled_data")]
pub use crate::provider::Baked;
icu_provider::data_marker!(
CurrencyFractionsV1,
CurrencyFractions<'static>,
is_singleton = true
);
#[derive(Clone, PartialEq, Debug, yoke::Yokeable, zerofrom::ZeroFrom)]
#[cfg_attr(feature = "serde", derive(serde::Deserialize))]
#[cfg_attr(feature = "datagen", derive(serde::Serialize, databake::Bake))]
#[cfg_attr(feature = "datagen", databake(path = icu_experimental::dimension::provider::currency::fractions))]
#[yoke(prove_covariance_manually)]
pub struct CurrencyFractions<'data> {
#[cfg_attr(feature = "serde", serde(borrow))]
pub fractions: ZeroMap<'data, UnvalidatedTinyAsciiStr<3>, FractionInfo>,
pub default: FractionInfo,
}
icu_provider::data_struct!(CurrencyFractions<'_>, #[cfg(feature = "datagen")]);
#[cfg_attr(feature = "serde", derive(serde::Deserialize))]
#[cfg_attr(feature = "datagen", derive(serde::Serialize, databake::Bake))]
#[cfg_attr(feature = "datagen", databake(path = icu_experimental::dimension::provider::currency::fractions))]
#[derive(Copy, Clone, Debug, PartialEq, Eq, Default)]
pub struct FractionInfo {
pub digits: u8,
pub rounding: u8,
pub cash_digits: Option<u8>,
pub cash_rounding: Option<u8>,
}