@@ -265,9 +265,7 @@ pub(crate) mod printf {
265
265
impl Num {
266
266
fn from_str ( s : & str , arg : Option < & str > ) -> Option < Self > {
267
267
if let Some ( arg) = arg {
268
- Some ( Num :: Arg (
269
- arg. parse ( ) . unwrap_or_else ( |_| panic ! ( "invalid format arg `{arg:?}`" ) ) ,
270
- ) )
268
+ arg. parse ( ) . ok ( ) . map ( |arg| Num :: Arg ( arg) )
271
269
} else if s == "*" {
272
270
Some ( Num :: Next )
273
271
} else {
@@ -423,7 +421,7 @@ pub(crate) mod printf {
423
421
state = Prec ;
424
422
parameter = None ;
425
423
flags = "" ;
426
- width = Num :: from_str ( at. slice_between ( end) . unwrap ( ) , None ) ;
424
+ width = at. slice_between ( end) . map ( |num| Num :: from_str ( num , None ) ) ;
427
425
if width. is_none ( ) {
428
426
return fallback ( ) ;
429
427
}
@@ -457,7 +455,7 @@ pub(crate) mod printf {
457
455
'1' ..='9' => {
458
456
let end = at_next_cp_while ( next, char:: is_ascii_digit) ;
459
457
state = Prec ;
460
- width = Num :: from_str ( at. slice_between ( end) . unwrap ( ) , None ) ;
458
+ width = at. slice_between ( end) . map ( |num| Num :: from_str ( num , None ) ) ;
461
459
if width. is_none ( ) {
462
460
return fallback ( ) ;
463
461
}
@@ -476,7 +474,7 @@ pub(crate) mod printf {
476
474
match end. next_cp ( ) {
477
475
Some ( ( '$' , end2) ) => {
478
476
state = Prec ;
479
- width = Some ( Num :: from_str ( "" , Some ( at. slice_between ( end) . unwrap ( ) ) ) . unwrap ( ) ) ;
477
+ width = Num :: from_str ( "" , at. slice_between ( end) ) ;
480
478
move_to ! ( end2) ;
481
479
}
482
480
_ => {
@@ -508,7 +506,7 @@ pub(crate) mod printf {
508
506
match end. next_cp ( ) {
509
507
Some ( ( '$' , end2) ) => {
510
508
state = Length ;
511
- precision = Some ( Num :: from_str ( "*" , next. slice_between ( end) ) . unwrap ( ) ) ;
509
+ precision = Num :: from_str ( "*" , next. slice_between ( end) ) ;
512
510
move_to ! ( end2) ;
513
511
}
514
512
_ => {
@@ -521,7 +519,7 @@ pub(crate) mod printf {
521
519
'0' ..='9' => {
522
520
let end = at_next_cp_while ( next, char:: is_ascii_digit) ;
523
521
state = Length ;
524
- precision = Some ( Num :: from_str ( at. slice_between ( end) . unwrap ( ) , None ) . unwrap ( ) ) ;
522
+ precision = at. slice_between ( end) . map ( |num| Num :: from_str ( num , None ) ) ;
525
523
move_to ! ( end) ;
526
524
}
527
525
_ => return fallback ( ) ,
0 commit comments