#![allow(clippy::exhaustive_structs, clippy::exhaustive_enums)]
#![allow(missing_docs)]
use alloc::borrow::Cow;
use icu_plurals::PluralCategory;
use icu_provider::{yoke, zerofrom, DataMarker};
use zerovec::ZeroMap2d;
#[icu_provider::data_struct(
LongCompactDecimalFormatDataV1Marker = "compactdecimal/long@1",
ShortCompactDecimalFormatDataV1Marker = "compactdecimal/short@1"
)]
#[derive(Debug, Clone, Default, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Deserialize))]
#[cfg_attr(
feature = "datagen",
derive(serde::Serialize, databake::Bake),
databake(path = icu_compactdecimal::provider)
)]
#[yoke(prove_covariance_manually)]
pub struct CompactDecimalPatternDataV1<'data> {
#[cfg_attr(feature = "serde", serde(borrow))]
pub patterns: ZeroMap2d<'data, i8, Count, PatternULE>,
}
#[zerovec::make_ule(CountULE)]
#[zerovec::derive(Debug)]
#[derive(Copy, Clone, PartialOrd, Ord, PartialEq, Eq, Debug)]
#[cfg_attr(feature = "serde", derive(serde::Deserialize))]
#[cfg_attr(
feature = "datagen",
derive(serde::Serialize, databake::Bake),
databake(path = icu_compactdecimal::provider)
)]
#[repr(u8)]
pub enum Count {
Zero = 0,
One = 1,
Two = 2,
Few = 3,
Many = 4,
Other = 5,
Explicit1 = 6,
}
impl From<PluralCategory> for Count {
fn from(other: PluralCategory) -> Self {
use PluralCategory::*;
match other {
Zero => Count::Zero,
One => Count::One,
Two => Count::Two,
Few => Count::Few,
Many => Count::Many,
Other => Count::Other,
}
}
}
#[derive(
Debug, Clone, Default, PartialEq, yoke::Yokeable, zerofrom::ZeroFrom, Ord, PartialOrd, Eq,
)]
#[zerovec::make_varule(PatternULE)]
#[cfg_attr(feature = "serde", derive(serde::Deserialize))]
#[cfg_attr(
feature = "datagen",
derive(serde::Serialize, databake::Bake),
databake(path = icu_compactdecimal::provider),
zerovec::derive(Serialize),
)]
#[zerovec::derive(Debug)]
#[cfg_attr(feature = "serde", zerovec::derive(Deserialize))]
pub struct Pattern<'data> {
pub exponent: i8,
pub index: u8,
#[cfg_attr(feature = "serde", serde(borrow))]
pub literal_text: Cow<'data, str>,
}
pub(crate) struct ErasedCompactDecimalFormatDataV1Marker;
impl DataMarker for ErasedCompactDecimalFormatDataV1Marker {
type Yokeable = CompactDecimalPatternDataV1<'static>;
}