@@ -66,35 +66,33 @@ impl From<&str> for FluentNumberCurrencyDisplayStyle {
66
66
}
67
67
}
68
68
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 ) ]
70
84
pub struct FluentNumberOptions {
71
85
pub style : FluentNumberStyle ,
72
86
pub currency : Option < String > ,
73
87
pub currency_display : FluentNumberCurrencyDisplayStyle ,
74
- pub use_grouping : bool ,
88
+ pub use_grouping : FluentNumberUseGrouping ,
75
89
pub minimum_integer_digits : Option < usize > ,
76
90
pub minimum_fraction_digits : Option < usize > ,
77
91
pub maximum_fraction_digits : Option < usize > ,
78
92
pub minimum_significant_digits : Option < usize > ,
79
93
pub maximum_significant_digits : Option < usize > ,
80
94
}
81
95
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
-
98
96
impl FluentNumberOptions {
99
97
pub fn merge ( & mut self , opts : & FluentArgs ) {
100
98
for ( key, value) in opts. iter ( ) {
@@ -109,7 +107,12 @@ impl FluentNumberOptions {
109
107
self . currency_display = n. as_ref ( ) . into ( ) ;
110
108
}
111
109
( "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
+ }
113
116
}
114
117
( "minimumIntegerDigits" , FluentValue :: Number ( n) ) => {
115
118
self . minimum_integer_digits = Some ( n. into ( ) ) ;
@@ -266,9 +269,9 @@ from_num!(f32 f64);
266
269
267
270
pub type NumberFormatProvider = Box < dyn DataProvider < DecimalSymbolsV1Marker > > ;
268
271
269
- #[ derive( Debug , Eq , PartialEq , Clone , Default , Hash ) ]
272
+ #[ derive( Clone , Hash , PartialEq , Eq ) ]
270
273
struct FormatterOptions {
271
- use_grouping : bool ,
274
+ use_grouping : FluentNumberUseGrouping ,
272
275
}
273
276
274
277
struct NumberFormatter ( FixedDecimalFormatter ) ;
@@ -293,8 +296,10 @@ impl Memoizable for NumberFormatter {
293
296
294
297
let mut options: FixedDecimalFormatterOptions = Default :: default ( ) ;
295
298
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 ,
298
303
} ;
299
304
300
305
let inner = FixedDecimalFormatter :: try_new_unstable (
0 commit comments