Skip to content

Commit 8f2dc43

Browse files
add missing options for FluentNumber use_grouping
1 parent b9b4dbe commit 8f2dc43

File tree

2 files changed

+30
-25
lines changed

2 files changed

+30
-25
lines changed

fluent-bundle/src/types/number.rs

+28-23
Original file line numberDiff line numberDiff line change
@@ -66,35 +66,33 @@ impl From<&str> for FluentNumberCurrencyDisplayStyle {
6666
}
6767
}
6868

69-
#[derive(Debug, Clone, Hash, PartialEq, Eq)]
69+
#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
70+
pub enum FluentNumberUseGrouping {
71+
Auto,
72+
False,
73+
Always,
74+
Min2,
75+
}
76+
77+
impl Default for FluentNumberUseGrouping {
78+
fn default() -> Self {
79+
Self::Auto
80+
}
81+
}
82+
83+
#[derive(Default, Debug, Clone, Hash, PartialEq, Eq)]
7084
pub struct FluentNumberOptions {
7185
pub style: FluentNumberStyle,
7286
pub currency: Option<String>,
7387
pub currency_display: FluentNumberCurrencyDisplayStyle,
74-
pub use_grouping: bool,
88+
pub use_grouping: FluentNumberUseGrouping,
7589
pub minimum_integer_digits: Option<usize>,
7690
pub minimum_fraction_digits: Option<usize>,
7791
pub maximum_fraction_digits: Option<usize>,
7892
pub minimum_significant_digits: Option<usize>,
7993
pub maximum_significant_digits: Option<usize>,
8094
}
8195

82-
impl Default for FluentNumberOptions {
83-
fn default() -> Self {
84-
Self {
85-
style: Default::default(),
86-
currency: None,
87-
currency_display: Default::default(),
88-
use_grouping: true,
89-
minimum_integer_digits: None,
90-
minimum_fraction_digits: None,
91-
maximum_fraction_digits: None,
92-
minimum_significant_digits: None,
93-
maximum_significant_digits: None,
94-
}
95-
}
96-
}
97-
9896
impl FluentNumberOptions {
9997
pub fn merge(&mut self, opts: &FluentArgs) {
10098
for (key, value) in opts.iter() {
@@ -109,7 +107,12 @@ impl FluentNumberOptions {
109107
self.currency_display = n.as_ref().into();
110108
}
111109
("useGrouping", FluentValue::String(n)) => {
112-
self.use_grouping = n != "false";
110+
self.use_grouping = match n.as_ref() {
111+
"false" => FluentNumberUseGrouping::False,
112+
"always" => FluentNumberUseGrouping::Always,
113+
"min2" => FluentNumberUseGrouping::Min2,
114+
_ => FluentNumberUseGrouping::Auto,
115+
}
113116
}
114117
("minimumIntegerDigits", FluentValue::Number(n)) => {
115118
self.minimum_integer_digits = Some(n.into());
@@ -266,9 +269,9 @@ from_num!(f32 f64);
266269

267270
pub type NumberFormatProvider = Box<dyn DataProvider<DecimalSymbolsV1Marker>>;
268271

269-
#[derive(Debug, Eq, PartialEq, Clone, Default, Hash)]
272+
#[derive(Clone, Hash, PartialEq, Eq)]
270273
struct FormatterOptions {
271-
use_grouping: bool,
274+
use_grouping: FluentNumberUseGrouping,
272275
}
273276

274277
struct NumberFormatter(FixedDecimalFormatter);
@@ -293,8 +296,10 @@ impl Memoizable for NumberFormatter {
293296

294297
let mut options: FixedDecimalFormatterOptions = Default::default();
295298
options.grouping_strategy = match args.0.use_grouping {
296-
true => GroupingStrategy::Always,
297-
false => GroupingStrategy::Auto,
299+
FluentNumberUseGrouping::Auto => GroupingStrategy::Auto,
300+
FluentNumberUseGrouping::False => GroupingStrategy::Never,
301+
FluentNumberUseGrouping::Always => GroupingStrategy::Always,
302+
FluentNumberUseGrouping::Min2 => GroupingStrategy::Min2,
298303
};
299304

300305
let inner = FixedDecimalFormatter::try_new_unstable(

fluent-bundle/tests/types_test.rs

+2-2
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_eq!(fno.use_grouping, false);
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)