@@ -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 ) ]
7791pub 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-
107104impl 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
279281pub type NumberFormatProvider = Box < dyn DataProvider < DecimalSymbolsV1Marker > > ;
280282
281- #[ derive( Debug , Eq , PartialEq , Clone , Default , Hash ) ]
283+ #[ derive( Clone , Hash , PartialEq , Eq ) ]
282284struct FormatterOptions {
283- use_grouping : bool ,
285+ use_grouping : FluentNumberUseGrouping ,
284286}
285287
286288struct 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 (
0 commit comments