@@ -7,18 +7,28 @@ pub(crate) fn parse_args() -> Command {
77 let first = args. next ( ) ;
88 match first. as_ref ( ) . map ( |s| s. as_str ( ) ) {
99 Some ( "build" ) => parse_build_args ( args) ,
10+ Some ( "run" ) => match parse_build_args ( args) {
11+ Command :: Build ( args) => Command :: Run ( args) ,
12+ Command :: BuildHelp => Command :: RunHelp ,
13+ cmd => cmd,
14+ } ,
1015 Some ( "--help" ) | Some ( "-h" ) => Command :: Help ,
1116 Some ( "--version" ) => Command :: Version ,
1217 _ => Command :: NoSubcommand ,
1318 }
1419}
1520
16- fn parse_build_args < A > ( args : A ) -> Command where A : Iterator < Item =String > {
21+ fn parse_build_args < A > ( args : A ) -> Command
22+ where
23+ A : Iterator < Item = String > ,
24+ {
1725 let mut manifest_path: Option < PathBuf > = None ;
1826 let mut target: Option < String > = None ;
1927 let mut release: Option < bool > = None ;
2028 let mut update_bootloader: Option < bool > = None ;
2129 let mut cargo_args = Vec :: new ( ) ;
30+ let mut run_args = Vec :: new ( ) ;
31+ let mut run_args_started = false ;
2232 {
2333 fn set < T > ( arg : & mut Option < T > , value : Option < T > ) {
2434 let previous = mem:: replace ( arg, value) ;
@@ -30,6 +40,10 @@ fn parse_build_args<A>(args: A) -> Command where A: Iterator<Item=String>{
3040
3141 let mut arg_iter = args. into_iter ( ) ;
3242 while let Some ( arg) = arg_iter. next ( ) {
43+ if run_args_started {
44+ run_args. push ( arg) ;
45+ continue ;
46+ }
3347 match arg. as_ref ( ) {
3448 "--help" | "-h" => {
3549 return Command :: BuildHelp ;
@@ -54,10 +68,7 @@ fn parse_build_args<A>(args: A) -> Command where A: Iterator<Item=String>{
5468 }
5569 "--manifest-path" => {
5670 let next = arg_iter. next ( ) ;
57- set (
58- & mut manifest_path,
59- next. as_ref ( ) . map ( |p| PathBuf :: from ( & p) ) ,
60- ) ;
71+ set ( & mut manifest_path, next. as_ref ( ) . map ( |p| PathBuf :: from ( & p) ) ) ;
6172 cargo_args. push ( arg) ;
6273 if let Some ( next) = next {
6374 cargo_args. push ( next) ;
@@ -71,10 +82,13 @@ fn parse_build_args<A>(args: A) -> Command where A: Iterator<Item=String>{
7182 "--release" => {
7283 set ( & mut release, Some ( true ) ) ;
7384 cargo_args. push ( arg) ;
74- } ,
85+ }
7586 "--update-bootloader" => {
7687 set ( & mut update_bootloader, Some ( true ) ) ;
7788 }
89+ "--" => {
90+ run_args_started = true ;
91+ }
7892 _ => {
7993 cargo_args. push ( arg) ;
8094 }
@@ -83,7 +97,8 @@ fn parse_build_args<A>(args: A) -> Command where A: Iterator<Item=String>{
8397 }
8498
8599 Command :: Build ( Args {
86- all_cargo : cargo_args,
100+ cargo_args,
101+ run_args,
87102 target,
88103 manifest_path,
89104 release : release. unwrap_or ( false ) ,
@@ -93,14 +108,16 @@ fn parse_build_args<A>(args: A) -> Command where A: Iterator<Item=String>{
93108
94109pub struct Args {
95110 /// All arguments that are passed to cargo.
96- pub all_cargo : Vec < String > ,
97- /// The manifest path (also present in `all_cargo`).
111+ pub cargo_args : Vec < String > ,
112+ /// All arguments that are passed to the runner.
113+ pub run_args : Vec < String > ,
114+ /// The manifest path (also present in `cargo_args`).
98115 manifest_path : Option < PathBuf > ,
99- /// The target triple (also present in `all_cargo `).
116+ /// The target triple (also present in `cargo_args `).
100117 target : Option < String > ,
101- /// The release flag (also present in `all_cargo `).
118+ /// The release flag (also present in `cargo_args `).
102119 release : bool ,
103- /// Whether the bootloader should be updated (not present in `all_cargo `).
120+ /// Whether the bootloader should be updated (not present in `cargo_args `).
104121 update_bootloader : bool ,
105122}
106123
@@ -124,7 +141,7 @@ impl Args {
124141 pub fn set_target ( & mut self , target : String ) {
125142 assert ! ( self . target. is_none( ) ) ;
126143 self . target = Some ( target. clone ( ) ) ;
127- self . all_cargo . push ( "--target" . into ( ) ) ;
128- self . all_cargo . push ( target) ;
144+ self . cargo_args . push ( "--target" . into ( ) ) ;
145+ self . cargo_args . push ( target) ;
129146 }
130147}
0 commit comments