@@ -11,6 +11,7 @@ pub type Result<T> = result::Result<T, Error>;
11
11
const ARG_PREFIX : & str = "--" ;
12
12
const ARG_SEPARATOR : & str = "--" ;
13
13
const HELP_ARG : & str = "--help" ;
14
+ const VERSION_ARG : & str = "--version" ;
14
15
15
16
/// Errors associated with parsing and validating arguments.
16
17
#[ derive( Debug , PartialEq ) ]
@@ -277,6 +278,16 @@ impl<'a> Arguments<'a> {
277
278
return Ok ( ( ) ) ;
278
279
}
279
280
281
+ // If `--version` is provided as a parameter, we artificially skip the parsing of other
282
+ // command line arguments by adding just the version argument to the parsed list and
283
+ // returning.
284
+ if args. contains ( & VERSION_ARG . to_string ( ) ) {
285
+ let mut version_arg = Argument :: new ( "version" ) . help ( "Print the binary version number." ) ;
286
+ version_arg. user_value = Some ( Value :: Bool ( true ) ) ;
287
+ self . insert_arg ( version_arg) ;
288
+ return Ok ( ( ) ) ;
289
+ }
290
+
280
291
// Otherwise, we continue the parsing of the other arguments.
281
292
self . populate_args ( args)
282
293
}
@@ -465,9 +476,10 @@ mod tests {
465
476
#[ test]
466
477
fn test_parse ( ) {
467
478
let arg_parser = build_arg_parser ( ) ;
468
- let mut arguments = arg_parser. arguments ( ) . clone ( ) ;
469
479
470
480
// Test different scenarios for the command line arguments provided by user.
481
+ let mut arguments = arg_parser. arguments ( ) . clone ( ) ;
482
+
471
483
let args = vec ! [ "binary-name" , "--exec-file" , "foo" , "--help" ]
472
484
. into_iter ( )
473
485
. map ( String :: from)
@@ -476,7 +488,16 @@ mod tests {
476
488
assert ! ( arguments. parse( & args) . is_ok( ) ) ;
477
489
assert ! ( arguments. args. contains_key( "help" ) ) ;
478
490
479
- let arg_parser = build_arg_parser ( ) ;
491
+ arguments = arg_parser. arguments ( ) . clone ( ) ;
492
+
493
+ let args = vec ! [ "binary-name" , "--exec-file" , "foo" , "--version" ]
494
+ . into_iter ( )
495
+ . map ( String :: from)
496
+ . collect :: < Vec < String > > ( ) ;
497
+
498
+ assert ! ( arguments. parse( & args) . is_ok( ) ) ;
499
+ assert ! ( arguments. args. contains_key( "version" ) ) ;
500
+
480
501
arguments = arg_parser. arguments ( ) . clone ( ) ;
481
502
482
503
let args = vec ! [
@@ -496,7 +517,6 @@ mod tests {
496
517
Err ( Error :: MissingValue ( "api-sock" . to_string( ) ) )
497
518
) ;
498
519
499
- let arg_parser = build_arg_parser ( ) ;
500
520
arguments = arg_parser. arguments ( ) . clone ( ) ;
501
521
502
522
let args = vec ! [
@@ -517,7 +537,6 @@ mod tests {
517
537
Err ( Error :: DuplicateArgument ( "api-sock" . to_string( ) ) )
518
538
) ;
519
539
520
- let arg_parser = build_arg_parser ( ) ;
521
540
arguments = arg_parser. arguments ( ) . clone ( ) ;
522
541
523
542
let args = vec ! [ "binary-name" , "--api-sock" , "foo" ]
@@ -530,7 +549,6 @@ mod tests {
530
549
Err ( Error :: MissingArgument ( "exec-file" . to_string( ) ) )
531
550
) ;
532
551
533
- let arg_parser = build_arg_parser ( ) ;
534
552
arguments = arg_parser. arguments ( ) . clone ( ) ;
535
553
536
554
let args = vec ! [
@@ -550,7 +568,6 @@ mod tests {
550
568
Err ( Error :: UnexpectedArgument ( "invalid-arg" . to_string( ) ) )
551
569
) ;
552
570
553
- let arg_parser = build_arg_parser ( ) ;
554
571
arguments = arg_parser. arguments ( ) . clone ( ) ;
555
572
556
573
let args = vec ! [
@@ -572,7 +589,6 @@ mod tests {
572
589
Err ( Error :: MissingArgument ( "config-file" . to_string( ) ) )
573
590
) ;
574
591
575
- let arg_parser = build_arg_parser ( ) ;
576
592
arguments = arg_parser. arguments ( ) . clone ( ) ;
577
593
578
594
let args = vec ! [
@@ -592,7 +608,6 @@ mod tests {
592
608
Err ( Error :: MissingValue ( "id" . to_string( ) ) )
593
609
) ;
594
610
595
- let arg_parser = build_arg_parser ( ) ;
596
611
arguments = arg_parser. arguments ( ) . clone ( ) ;
597
612
598
613
let args = vec ! [
@@ -613,7 +628,6 @@ mod tests {
613
628
Err ( Error :: UnexpectedArgument ( "foobar" . to_string( ) ) )
614
629
) ;
615
630
616
- let arg_parser = build_arg_parser ( ) ;
617
631
arguments = arg_parser. arguments ( ) . clone ( ) ;
618
632
619
633
let args = vec ! [
@@ -633,7 +647,6 @@ mod tests {
633
647
Err ( Error :: UnexpectedArgument ( "foobar" . to_string( ) ) )
634
648
) ;
635
649
636
- let arg_parser = build_arg_parser ( ) ;
637
650
arguments = arg_parser. arguments ( ) . clone ( ) ;
638
651
639
652
let args = vec ! [ "binary-name" , "foo" ]
@@ -646,7 +659,6 @@ mod tests {
646
659
Err ( Error :: UnexpectedArgument ( "foo" . to_string( ) ) )
647
660
) ;
648
661
649
- let arg_parser = build_arg_parser ( ) ;
650
662
arguments = arg_parser. arguments ( ) . clone ( ) ;
651
663
652
664
let args = vec ! [
0 commit comments