Skip to content

Commit 7b28849

Browse files
committed
Add args: Args back to Ndk subcommand to see them in -h
Mixed `cargo-apk` and `cargo` args will still be split out from `cargo_args`, and they'll be appended to existing values for `args`.
1 parent d388e4a commit 7b28849

File tree

1 file changed

+52
-30
lines changed

1 file changed

+52
-30
lines changed

cargo-apk/src/main.rs

Lines changed: 52 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -49,10 +49,13 @@ enum ApkSubCmd {
4949
/// `cargo` subcommand to run
5050
cargo_cmd: String,
5151

52+
// This struct will be filled up later by arguments that are intermixed
53+
// with unknown args and ended up in `cargo_args` below.
54+
#[clap(flatten)]
55+
args: Args,
56+
5257
/// Arguments passed to cargo. Some arguments will be used to configure
5358
/// the environment similar to other `cargo apk` commands
54-
// TODO: This enum variant should parse into `Args` as soon as `clap` supports
55-
// parsing
5659
#[clap(trailing_var_arg = true, allow_hyphen_values = true)]
5760
cargo_args: Vec<String>,
5861
},
@@ -74,7 +77,7 @@ enum ApkSubCmd {
7477
Version,
7578
}
7679

77-
fn split_apk_and_cargo_args(input: Vec<String>) -> (Args, Vec<String>) {
80+
fn split_apk_and_cargo_args(mut args: Args, input: Vec<String>) -> (Args, Vec<String>) {
7881
// Clap doesn't support parsing unknown args properly
7982
// https://github.com/clap-rs/clap/issues/1404
8083
// https://github.com/clap-rs/clap/issues/4498
@@ -124,7 +127,7 @@ fn split_apk_and_cargo_args(input: Vec<String>) -> (Args, Vec<String>) {
124127
let m = Args::command()
125128
.no_binary_name(true)
126129
.get_matches_from(&split_args.apk_args);
127-
let args = Args::from_arg_matches(&m).unwrap();
130+
args.update_from_arg_matches(&m).unwrap();
128131
(args, split_args.cargo_args)
129132
}
130133

@@ -148,9 +151,10 @@ fn main() -> anyhow::Result<()> {
148151
}
149152
ApkSubCmd::Ndk {
150153
cargo_cmd,
154+
args,
151155
cargo_args,
152156
} => {
153-
let (args, cargo_args) = split_apk_and_cargo_args(cargo_args);
157+
let (args, cargo_args) = split_apk_and_cargo_args(args, cargo_args);
154158

155159
let cmd = Subcommand::new(args.subcommand_args)?;
156160
let builder = ApkBuilder::from_subcommand(&cmd, args.device)?;
@@ -181,7 +185,7 @@ fn test_split_apk_and_cargo_args() {
181185
let args_default = Args::parse_from(std::iter::empty::<&str>());
182186

183187
assert_eq!(
184-
split_apk_and_cargo_args(vec!["--quiet".to_string()]),
188+
split_apk_and_cargo_args(args_default.clone(), vec!["--quiet".to_string()]),
185189
(
186190
Args {
187191
subcommand_args: cargo_subcommand::Args {
@@ -195,7 +199,10 @@ fn test_split_apk_and_cargo_args() {
195199
);
196200

197201
assert_eq!(
198-
split_apk_and_cargo_args(vec!["unrecognized".to_string(), "--quiet".to_string()]),
202+
split_apk_and_cargo_args(
203+
args_default.clone(),
204+
vec!["unrecognized".to_string(), "--quiet".to_string()]
205+
),
199206
(
200207
Args {
201208
subcommand_args: cargo_subcommand::Args {
@@ -209,7 +216,10 @@ fn test_split_apk_and_cargo_args() {
209216
);
210217

211218
assert_eq!(
212-
split_apk_and_cargo_args(vec!["--unrecognized".to_string(), "--quiet".to_string()]),
219+
split_apk_and_cargo_args(
220+
args_default.clone(),
221+
vec!["--unrecognized".to_string(), "--quiet".to_string()]
222+
),
213223
(
214224
Args {
215225
subcommand_args: cargo_subcommand::Args {
@@ -223,7 +233,10 @@ fn test_split_apk_and_cargo_args() {
223233
);
224234

225235
assert_eq!(
226-
split_apk_and_cargo_args(vec!["-p".to_string(), "foo".to_string()]),
236+
split_apk_and_cargo_args(
237+
args_default.clone(),
238+
vec!["-p".to_string(), "foo".to_string()]
239+
),
227240
(
228241
Args {
229242
subcommand_args: cargo_subcommand::Args {
@@ -237,12 +250,15 @@ fn test_split_apk_and_cargo_args() {
237250
);
238251

239252
assert_eq!(
240-
split_apk_and_cargo_args(vec![
241-
"-p".to_string(),
242-
"foo".to_string(),
243-
"--unrecognized".to_string(),
244-
"--quiet".to_string()
245-
]),
253+
split_apk_and_cargo_args(
254+
args_default.clone(),
255+
vec![
256+
"-p".to_string(),
257+
"foo".to_string(),
258+
"--unrecognized".to_string(),
259+
"--quiet".to_string()
260+
]
261+
),
246262
(
247263
Args {
248264
subcommand_args: cargo_subcommand::Args {
@@ -257,34 +273,40 @@ fn test_split_apk_and_cargo_args() {
257273
);
258274

259275
assert_eq!(
260-
split_apk_and_cargo_args(vec![
261-
"--no-deps".to_string(),
262-
"-p".to_string(),
263-
"foo".to_string(),
264-
"--unrecognized".to_string(),
265-
"--quiet".to_string()
266-
]),
276+
split_apk_and_cargo_args(
277+
args_default.clone(),
278+
vec![
279+
"--no-deps".to_string(),
280+
"-p".to_string(),
281+
"foo".to_string(),
282+
"--unrecognized".to_string(),
283+
"--quiet".to_string()
284+
]
285+
),
267286
(
268287
Args {
269288
subcommand_args: cargo_subcommand::Args {
270289
quiet: true,
271290
package: vec!["foo".to_string()],
272291
..args_default.subcommand_args.clone()
273292
},
274-
..args_default
293+
..args_default.clone()
275294
},
276295
vec!["--no-deps".to_string(), "--unrecognized".to_string()]
277296
)
278297
);
279298

280299
assert_eq!(
281-
split_apk_and_cargo_args(vec![
282-
"--no-deps".to_string(),
283-
"--device".to_string(),
284-
"adb:test".to_string(),
285-
"--unrecognized".to_string(),
286-
"--quiet".to_string()
287-
]),
300+
split_apk_and_cargo_args(
301+
args_default.clone(),
302+
vec![
303+
"--no-deps".to_string(),
304+
"--device".to_string(),
305+
"adb:test".to_string(),
306+
"--unrecognized".to_string(),
307+
"--quiet".to_string()
308+
]
309+
),
288310
(
289311
Args {
290312
subcommand_args: cargo_subcommand::Args {

0 commit comments

Comments
 (0)