@@ -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 ) ]
7084pub 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-
9896impl 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
267270pub type NumberFormatProvider = Box < dyn DataProvider < DecimalSymbolsV1Marker > > ;
268271
269- #[ derive( Debug , Eq , PartialEq , Clone , Default , Hash ) ]
272+ #[ derive( Clone , Hash , PartialEq , Eq ) ]
270273struct FormatterOptions {
271- use_grouping : bool ,
274+ use_grouping : FluentNumberUseGrouping ,
272275}
273276
274277struct 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_with_any_provider (
0 commit comments