我希望能够使用变量的值(或者更好的是,function(arg)的返回)作为使用structopt定义的CLI程序的关于字符串。最终目标是一个完全本地化的CLI,它检测系统语言或ENV,并加载本地化的字符串,这些字符串被烘焙到--help消息中,等等。
默认情况下,它使用文档注释:
/// My about string
#[derive(StructOpt)]
struct Cli {}我发现我可以传递一个手动输入的字符串:
#[derive(StructOpt)]
#[structopt(about = "My about string")]
struct Cli {}这更近了一步,但我真正想做的是传递一个变量:
let about: &str = "My about string";
#[derive(StructOpt)]
#[structopt(about = var!(about))]
struct Cli {}最后一个代码块是伪代码,因为我不知道使用什么语法来实现这一点。最后,我需要的不仅仅是一个单独的字符串片,但我认为这是一个开始。
如何将这样的值传递给structopt?我需要以某种方式访问底层的clap界面吗?
发布于 2020-04-28 03:56:32
StructOpt只是在clap上添加了一个派生宏和一个相应的特征。clap crate有一个set the about message at runtime函数,所以我们只需要添加它。如果我们查看how from_args works,我们可以看到它在将其转换为用户定义的结构之前创建了clap App结构。
因此,要做你想做的事情:
use structopt::StructOpt;
fn get_localized_about() -> &'static str {
"localized string"
}
#[derive(Debug, StructOpt)]
struct Foo {}
fn main() {
let foo = Foo::from_clap(&Foo::clap().about(get_localized_about()).get_matches());
println!("{:#?}", foo);
}https://stackoverflow.com/questions/61463494
复制相似问题