@@ -181,11 +181,11 @@ fn parse_alternate_form(text: &str) -> (bool, &str) {
181
181
}
182
182
}
183
183
184
- fn parse_zero ( text : & str ) -> & str {
184
+ fn parse_zero ( text : & str ) -> ( bool , & str ) {
185
185
let mut chars = text. chars ( ) ;
186
186
match chars. next ( ) {
187
- Some ( '0' ) => chars. as_str ( ) ,
188
- _ => text,
187
+ Some ( '0' ) => ( true , chars. as_str ( ) ) ,
188
+ _ => ( false , text) ,
189
189
}
190
190
}
191
191
@@ -235,15 +235,20 @@ fn parse_format_type(text: &str) -> (Option<FormatType>, &str) {
235
235
236
236
fn parse_format_spec ( text : & str ) -> FormatSpec {
237
237
let ( preconversor, after_preconversor) = parse_preconversor ( text) ;
238
- let ( fill, align, after_align) = parse_fill_and_align ( after_preconversor) ;
238
+ let ( mut fill, mut align, after_align) = parse_fill_and_align ( after_preconversor) ;
239
239
let ( sign, after_sign) = parse_sign ( after_align) ;
240
240
let ( alternate_form, after_alternate_form) = parse_alternate_form ( after_sign) ;
241
- let after_zero = parse_zero ( after_alternate_form) ;
241
+ let ( zero , after_zero) = parse_zero ( after_alternate_form) ;
242
242
let ( width, after_width) = parse_number ( after_zero) ;
243
243
let ( grouping_option, after_grouping_option) = parse_grouping_option ( after_width) ;
244
244
let ( precision, after_precision) = parse_precision ( after_grouping_option) ;
245
245
let ( format_type, _) = parse_format_type ( after_precision) ;
246
246
247
+ if zero && fill. is_none ( ) {
248
+ fill. replace ( '0' ) ;
249
+ align = align. or ( Some ( FormatAlign :: AfterSign ) ) ;
250
+ }
251
+
247
252
FormatSpec {
248
253
preconversor,
249
254
fill,
0 commit comments