Struct icu_plurals::PluralOperands
source · pub struct PluralOperands {
pub(crate) i: u64,
pub(crate) v: usize,
pub(crate) w: usize,
pub(crate) f: u64,
pub(crate) t: u64,
pub(crate) c: usize,
}
Expand description
A full plural operands representation of a number. See CLDR Plural Rules for complete operands description. Plural operands in compliance with CLDR Plural Rules.
See full operands description.
§Data Types
The following types can be converted to PluralOperands
:
- Integers, signed and unsigned
- Strings representing an arbitrary-precision decimal
FixedDecimal
This crate does not support selection from a floating-point number, because floats are not
capable of carrying trailing zeros, which are required for proper plural rule selection. For
example, in English, “1 star” has a different plural form than “1.0 stars”, but this
distinction cannot be represented using a float. Clients should use FixedDecimal
instead.
§Examples
From int
use icu::plurals::rules::RawPluralOperands;
use icu::plurals::PluralOperands;
assert_eq!(
PluralOperands::from(RawPluralOperands {
i: 2,
v: 0,
w: 0,
f: 0,
t: 0,
c: 0,
}),
PluralOperands::from(2_usize)
);
From &str
use icu::plurals::rules::RawPluralOperands;
use icu::plurals::PluralOperands;
assert_eq!(
Ok(PluralOperands::from(RawPluralOperands {
i: 123,
v: 2,
w: 2,
f: 45,
t: 45,
c: 0,
})),
"123.45".parse()
);
From FixedDecimal
use fixed_decimal::FixedDecimal;
use icu::plurals::rules::RawPluralOperands;
use icu::plurals::PluralOperands;
assert_eq!(
PluralOperands::from(RawPluralOperands {
i: 123,
v: 2,
w: 2,
f: 45,
t: 45,
c: 0,
}),
(&FixedDecimal::from(12345).multiplied_pow10(-2)).into()
);
Fields§
§i: u64
Integer value of input
v: usize
Number of visible fraction digits with trailing zeros
w: usize
Number of visible fraction digits without trailing zeros
f: u64
Visible fraction digits with trailing zeros
t: u64
Visible fraction digits without trailing zeros
c: usize
Exponent of the power of 10 used in compact decimal formatting
Implementations§
source§impl PluralOperands
impl PluralOperands
fn from_significand_and_exponent(dec: &FixedDecimal, exp: u8) -> PluralOperands
Trait Implementations§
source§impl Clone for PluralOperands
impl Clone for PluralOperands
source§fn clone(&self) -> PluralOperands
fn clone(&self) -> PluralOperands
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moresource§impl Debug for PluralOperands
impl Debug for PluralOperands
source§impl Default for PluralOperands
impl Default for PluralOperands
source§fn default() -> PluralOperands
fn default() -> PluralOperands
source§impl From<&CompactDecimal> for PluralOperands
impl From<&CompactDecimal> for PluralOperands
source§fn from(compact: &CompactDecimal) -> Self
fn from(compact: &CompactDecimal) -> Self
Converts a fixed_decimal::CompactDecimal
to PluralOperands
. Retains at most 18
digits each from the integer and fraction parts.
§Examples
use fixed_decimal::CompactDecimal;
use fixed_decimal::FixedDecimal;
use icu::locid::locale;
use icu::plurals::rules::RawPluralOperands;
use icu::plurals::PluralCategory;
use icu::plurals::PluralOperands;
use icu::plurals::PluralRules;
let fixed_decimal = "1000000.20".parse::<FixedDecimal>().unwrap();
let compact_decimal = "1.00000020c6".parse::<CompactDecimal>().unwrap();
assert_eq!(
PluralOperands::from(RawPluralOperands {
i: 1000000,
v: 2,
w: 1,
f: 20,
t: 2,
c: 0,
}),
PluralOperands::from(&fixed_decimal)
);
assert_eq!(
PluralOperands::from(RawPluralOperands {
i: 1000000,
v: 2,
w: 1,
f: 20,
t: 2,
c: 6,
}),
PluralOperands::from(&compact_decimal)
);
let rules = PluralRules::try_new_cardinal(&locale!("fr").into()).unwrap();
assert_eq!(rules.category_for(&fixed_decimal), PluralCategory::Other);
assert_eq!(rules.category_for(&compact_decimal), PluralCategory::Many);
source§impl From<&FixedDecimal> for PluralOperands
impl From<&FixedDecimal> for PluralOperands
source§fn from(dec: &FixedDecimal) -> Self
fn from(dec: &FixedDecimal) -> Self
Converts a fixed_decimal::FixedDecimal
to PluralOperands
. Retains at most 18
digits each from the integer and fraction parts.
source§impl From<i128> for PluralOperands
impl From<i128> for PluralOperands
source§impl From<i16> for PluralOperands
impl From<i16> for PluralOperands
source§impl From<i32> for PluralOperands
impl From<i32> for PluralOperands
source§impl From<i64> for PluralOperands
impl From<i64> for PluralOperands
source§impl From<i8> for PluralOperands
impl From<i8> for PluralOperands
source§impl From<isize> for PluralOperands
impl From<isize> for PluralOperands
source§impl From<u128> for PluralOperands
impl From<u128> for PluralOperands
source§impl From<u16> for PluralOperands
impl From<u16> for PluralOperands
source§impl From<u32> for PluralOperands
impl From<u32> for PluralOperands
source§impl From<u64> for PluralOperands
impl From<u64> for PluralOperands
source§impl From<u8> for PluralOperands
impl From<u8> for PluralOperands
source§impl From<usize> for PluralOperands
impl From<usize> for PluralOperands
source§impl FromStr for PluralOperands
impl FromStr for PluralOperands
source§impl PartialEq for PluralOperands
impl PartialEq for PluralOperands
impl Copy for PluralOperands
impl StructuralPartialEq for PluralOperands
Auto Trait Implementations§
impl Freeze for PluralOperands
impl RefUnwindSafe for PluralOperands
impl Send for PluralOperands
impl Sync for PluralOperands
impl Unpin for PluralOperands
impl UnwindSafe for PluralOperands
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)