Skip to content

Commit d10a3cf

Browse files
committed
Add example for captureing commands
1 parent c8f94bf commit d10a3cf

File tree

1 file changed

+11
-2
lines changed

1 file changed

+11
-2
lines changed

examples/advanced/src/main.rs

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
use clap::{arg, Parser};
12
use clap_config_file::ClapConfigFile;
23

34
/// This struct demonstrates usage of the ClapConfigFile derive with various attributes.
@@ -6,7 +7,8 @@ use clap_config_file::ClapConfigFile;
67
/// - `#[config_only]`: Field only comes from config file (or raw config data).
78
/// - `#[cli_only]`: Field only comes from CLI.
89
/// - `#[multi_value_behavior]`: Controls how `Vec` fields merge between config and CLI.
9-
#[derive(ClapConfigFile, Debug)]
10+
#[derive(ClapConfigFile, Parser, Debug)]
11+
#[clap(trailing_var_arg = true)]
1012
struct AdvancedConfig {
1113
/// Example of a field that can come from both CLI and config, with CLI taking precedence.
1214
///
@@ -48,6 +50,10 @@ struct AdvancedConfig {
4850
#[config_arg(name = "overwrite-list")]
4951
#[multi_value_behavior(Overwrite)]
5052
pub overwrite_list: Vec<String>,
53+
54+
/// Any additional commands or arguments
55+
#[clap(last = true)]
56+
pub commands: Vec<String>,
5157
}
5258

5359
fn main() {
@@ -58,8 +64,11 @@ fn main() {
5864
println!("Final merged config:\n{:#?}", config);
5965

6066
// Example usage:
61-
// $ cargo run --example advanced -- --port 3001 --overwrite-list CLI_item
67+
// $ cargo run --example advanced -- --port 3001 --overwrite-list CLI_item additional_command
6268
//
6369
// That overrides the port and the overwrite_list. If advanced-config.yaml
6470
// has `database_url` etc., that remains unless overridden or suppressed.
71+
if !config.commands.is_empty() {
72+
println!("\nReceived commands: {:?}", config.commands);
73+
}
6574
}

0 commit comments

Comments
 (0)