Rustlang structopt 如何设置主目录
Rustlang structopt How to set the home directory
我正在为我的 cli 程序使用箱 structopt。如果未传递 args 中的输出目录,我想将主目录设置为默认目录。下面是我的代码,请建议我如何实现。
Command.rs
pub enum Command {
#[structopt(name = "init")]
Init(InitCmd),
}
impl Command {
/// Wrapper around `StructOpt::from_args` method.
pub fn from_args() -> Self {
<Self as StructOpt>::from_args()
}
}
mod commands;
pub use commands::Command;
fn main(){
match Command::from_args() {
Command::Init(cmd) => {
println!("{:?}", cmd.execute())
},
}
}
impl InitCmd {
/// Run the command
pub fn execute(&self) -> Result<(), Error> {
Ok(())
}
}
structopt
字段可以采用默认值,但还有 an ENV fallback 如果未明确提供该选项,它将从环境变量中获取默认值。
如果您可以假设 运行 在 POSIX 系统上,那么 HOME 将设置为当前用户的家。
如果可以不假设POSIX,那么我认为有两种方式:
- 您可以将选项定义为
Option
。如果未指定,它将被设置为 None
,并且在 use-site 处,您可以将 None
换成用户的 homedir
- 定义一个具有所有正确位的自定义类型,如果未指定则默认为 homedir(请参阅 structopt 文档以了解如何执行此操作,它涉及
FromStr
以及可选的 Default
和 ToString
)
无论哪种方式,您都可以使用 dirs::home_dir 获取主目录。
我正在为我的 cli 程序使用箱 structopt。如果未传递 args 中的输出目录,我想将主目录设置为默认目录。下面是我的代码,请建议我如何实现。
Command.rs
pub enum Command {
#[structopt(name = "init")]
Init(InitCmd),
}
impl Command {
/// Wrapper around `StructOpt::from_args` method.
pub fn from_args() -> Self {
<Self as StructOpt>::from_args()
}
}
mod commands;
pub use commands::Command;
fn main(){
match Command::from_args() {
Command::Init(cmd) => {
println!("{:?}", cmd.execute())
},
}
}
impl InitCmd {
/// Run the command
pub fn execute(&self) -> Result<(), Error> {
Ok(())
}
}
structopt
字段可以采用默认值,但还有 an ENV fallback 如果未明确提供该选项,它将从环境变量中获取默认值。
如果您可以假设 运行 在 POSIX 系统上,那么 HOME 将设置为当前用户的家。
如果可以不假设POSIX,那么我认为有两种方式:
- 您可以将选项定义为
Option
。如果未指定,它将被设置为None
,并且在 use-site 处,您可以将None
换成用户的 homedir - 定义一个具有所有正确位的自定义类型,如果未指定则默认为 homedir(请参阅 structopt 文档以了解如何执行此操作,它涉及
FromStr
以及可选的Default
和ToString
)
无论哪种方式,您都可以使用 dirs::home_dir 获取主目录。