Skip to content

Commit ca9d8e6

Browse files
add missing options for FluentNumber use_grouping
1 parent 80a88fb commit ca9d8e6

File tree

3 files changed

+31
-27
lines changed

3 files changed

+31
-27
lines changed

fluent-bundle/src/types/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -273,7 +273,7 @@ impl<'source> FluentValue<'source> {
273273
}
274274
match self {
275275
FluentValue::String(s) => s,
276-
FluentValue::Number(n) => n.as_string(),
276+
FluentValue::Number(n) => n.as_string(scope.bundle),
277277
FluentValue::Custom(s) => scope.bundle.intls.stringify_value(s.as_ref()),
278278
FluentValue::Error => "".into(),
279279
FluentValue::None => "".into(),

fluent-bundle/src/types/number.rs

Lines changed: 28 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -73,37 +73,34 @@ impl From<&str> for FluentNumberCurrencyDisplayStyle {
7373
}
7474
}
7575

76-
#[derive(Debug, Clone, Hash, PartialEq, Eq)]
76+
#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
77+
pub enum FluentNumberUseGrouping {
78+
Auto,
79+
False,
80+
Always,
81+
Min2,
82+
}
83+
84+
impl Default for FluentNumberUseGrouping {
85+
fn default() -> Self {
86+
Self::Auto
87+
}
88+
}
89+
90+
#[derive(Default, Debug, Clone, Hash, PartialEq, Eq)]
7791
pub struct FluentNumberOptions {
7892
pub r#type: FluentNumberType,
7993
pub style: FluentNumberStyle,
8094
pub currency: Option<String>,
8195
pub currency_display: FluentNumberCurrencyDisplayStyle,
82-
pub use_grouping: bool,
96+
pub use_grouping: FluentNumberUseGrouping,
8397
pub minimum_integer_digits: Option<usize>,
8498
pub minimum_fraction_digits: Option<usize>,
8599
pub maximum_fraction_digits: Option<usize>,
86100
pub minimum_significant_digits: Option<usize>,
87101
pub maximum_significant_digits: Option<usize>,
88102
}
89103

90-
impl Default for FluentNumberOptions {
91-
fn default() -> Self {
92-
Self {
93-
r#type: Default::default(),
94-
style: Default::default(),
95-
currency: None,
96-
currency_display: Default::default(),
97-
use_grouping: true,
98-
minimum_integer_digits: None,
99-
minimum_fraction_digits: None,
100-
maximum_fraction_digits: None,
101-
minimum_significant_digits: None,
102-
maximum_significant_digits: None,
103-
}
104-
}
105-
}
106-
107104
impl FluentNumberOptions {
108105
pub fn merge(&mut self, opts: &FluentArgs) {
109106
for (key, value) in opts.iter() {
@@ -121,7 +118,12 @@ impl FluentNumberOptions {
121118
self.currency_display = n.as_ref().into();
122119
}
123120
("useGrouping", FluentValue::String(n)) => {
124-
self.use_grouping = n != "false";
121+
self.use_grouping = match n.as_ref() {
122+
"false" => FluentNumberUseGrouping::False,
123+
"always" => FluentNumberUseGrouping::Always,
124+
"min2" => FluentNumberUseGrouping::Min2,
125+
_ => FluentNumberUseGrouping::Auto,
126+
}
125127
}
126128
("minimumIntegerDigits", FluentValue::Number(n)) => {
127129
self.minimum_integer_digits = Some(n.into());
@@ -278,9 +280,9 @@ from_num!(f32 f64);
278280

279281
pub type NumberFormatProvider = Box<dyn DataProvider<DecimalSymbolsV1Marker>>;
280282

281-
#[derive(Debug, Eq, PartialEq, Clone, Default, Hash)]
283+
#[derive(Clone, Hash, PartialEq, Eq)]
282284
struct FormatterOptions {
283-
use_grouping: bool,
285+
use_grouping: FluentNumberUseGrouping,
284286
}
285287

286288
struct NumberFormatter(FixedDecimalFormatter);
@@ -306,8 +308,10 @@ impl Memoizable for NumberFormatter {
306308

307309
let mut options: FixedDecimalFormatterOptions = Default::default();
308310
options.grouping_strategy = match args.0.use_grouping {
309-
true => GroupingStrategy::Always,
310-
false => GroupingStrategy::Auto,
311+
FluentNumberUseGrouping::Auto => GroupingStrategy::Auto,
312+
FluentNumberUseGrouping::False => GroupingStrategy::Never,
313+
FluentNumberUseGrouping::Always => GroupingStrategy::Always,
314+
FluentNumberUseGrouping::Min2 => GroupingStrategy::Min2,
311315
};
312316

313317
let inner = FixedDecimalFormatter::try_new_with_any_provider(

fluent-bundle/tests/types_test.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use fluent_bundle::resolver::Scope;
22
use fluent_bundle::types::{
3-
FluentNumber, FluentNumberCurrencyDisplayStyle, FluentNumberOptions, FluentNumberStyle,
3+
FluentNumber, FluentNumberCurrencyDisplayStyle, FluentNumberOptions, FluentNumberStyle, FluentNumberUseGrouping,
44
};
55
use fluent_bundle::FluentArgs;
66
use fluent_bundle::FluentBundle;
@@ -120,7 +120,7 @@ fn fluent_number_style() {
120120
assert_eq!(fno.style, FluentNumberStyle::Currency);
121121
assert_eq!(fno.currency, Some("EUR".to_string()));
122122
assert_eq!(fno.currency_display, FluentNumberCurrencyDisplayStyle::Code);
123-
assert!(!fno.use_grouping);
123+
assert_eq!(fno.use_grouping, FluentNumberUseGrouping::False);
124124

125125
let num = FluentNumber::new(0.2, FluentNumberOptions::default());
126126
assert_eq!(num.as_string_basic(), "0.2");

0 commit comments

Comments
 (0)