Rust Noob here:)using rust clap 3.2.23
我有两个子命令:
1.generate(负责根据输入参数生成item,并存储在后台DB中)
#[derive(Args, Debug)]
#[clap(group(ArgGroup::new("qwerty").required(true).multiple(true)))]
pub struct GenerateArgs {
#[clap(group = "abc", long = "id", value_name = "ID")]
id: Option<i64>,
#[clap(group = "abc", long = "regex", value_name = "REGEX")]
regex: Option<String>,
#[clap(
group = "abc",
long = "start-time",
required = true,
value_name = "STARTTIME",
)]
start_time: Option<i64>,
#[clap(
group = "abc",
long = "end-time",
value_name = "ENDTIME",
required = true,
)]
end_time: Option<i64>,
}
1.run(负责使用提供的参数执行DB中的存储)
#[derive(Args, Debug)]
#[clap(group(ArgGroup::new("qwerty").required(true).multiple(true)))]
pub struct RunArgs {
#[clap(group = "abc", long = "run-id", value_name = "RUNID")]
run_id: Option<i64>,
#[clap(group = "abc", long = "retry", value_name = "RETRY")]
retry: Option<i64>,
#[clap(
group = "abc",
long = "delay",
value_name = "DELAY",
)]
delay: Option<i64>,
}
我想重载run
子命令的行为,以便除了它自己的参数之外,它还可以接受generate
子命令的相同参数。如果generate
子命令的参数由用户提供给run
子命令,则系统将首先生成项,存储在DB中,然后执行项。因此,用户可以在单个命令中生成和运行,而不是两个不同的命令,如果他们应该选择这样做的话。
是否需要在run
子命令中重新定义generate
子命令支持的所有参数?还是有办法重用这些参数?重用会有所帮助,这样我就不需要维护两个子命令之间的更改。
1条答案
按热度按时间w8f9ii691#
你应该可以通过在
RunArgs
中添加一个GenerateArgs
字段来实现这一点,并使用#[command(flatten)]
进行修饰:这假设
GenerateArgs
派生clap::Args
。