@@ -73,37 +73,34 @@ impl From<&str> for FluentNumberCurrencyDisplayStyle {
73
73
}
74
74
}
75
75
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 ) ]
77
91
pub struct FluentNumberOptions {
78
92
pub r#type : FluentNumberType ,
79
93
pub style : FluentNumberStyle ,
80
94
pub currency : Option < String > ,
81
95
pub currency_display : FluentNumberCurrencyDisplayStyle ,
82
- pub use_grouping : bool ,
96
+ pub use_grouping : FluentNumberUseGrouping ,
83
97
pub minimum_integer_digits : Option < usize > ,
84
98
pub minimum_fraction_digits : Option < usize > ,
85
99
pub maximum_fraction_digits : Option < usize > ,
86
100
pub minimum_significant_digits : Option < usize > ,
87
101
pub maximum_significant_digits : Option < usize > ,
88
102
}
89
103
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
-
107
104
impl FluentNumberOptions {
108
105
pub fn merge ( & mut self , opts : & FluentArgs ) {
109
106
for ( key, value) in opts. iter ( ) {
@@ -121,7 +118,12 @@ impl FluentNumberOptions {
121
118
self . currency_display = n. as_ref ( ) . into ( ) ;
122
119
}
123
120
( "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
+ }
125
127
}
126
128
( "minimumIntegerDigits" , FluentValue :: Number ( n) ) => {
127
129
self . minimum_integer_digits = Some ( n. into ( ) ) ;
@@ -278,9 +280,9 @@ from_num!(f32 f64);
278
280
279
281
pub type NumberFormatProvider = Box < dyn DataProvider < DecimalSymbolsV1Marker > > ;
280
282
281
- #[ derive( Debug , Eq , PartialEq , Clone , Default , Hash ) ]
283
+ #[ derive( Clone , Hash , PartialEq , Eq ) ]
282
284
struct FormatterOptions {
283
- use_grouping : bool ,
285
+ use_grouping : FluentNumberUseGrouping ,
284
286
}
285
287
286
288
struct NumberFormatter ( FixedDecimalFormatter ) ;
@@ -306,8 +308,10 @@ impl Memoizable for NumberFormatter {
306
308
307
309
let mut options: FixedDecimalFormatterOptions = Default :: default ( ) ;
308
310
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 ,
311
315
} ;
312
316
313
317
let inner = FixedDecimalFormatter :: try_new_with_any_provider (
0 commit comments