0

我正在为我的 cli 程序使用 crate 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(())
    }
}
4

1 回答 1

0

structopt字段可以采用默认值,但如果没有明确提供选项,还有一个 ENV 回退,它将从 envvar 获取默认值。

如果您可以假设在 POSIX 系统上运行,那么 HOME 将设置为当前用户的家。

如果你不能假设POSIX,那么我认为有两种方法:

  • 您可以将选项定义为一个Option. 如果未指定,它将被设置为None,并且在使用站点您可以将 替换None为用户的主目录
  • 定义一个具有所有正确位的自定义类型,如果未指定,则默认为 homedir(有关如何执行此操作,请参阅 structopt 文档,它涉及和FromStr可选)DefaultToString

无论哪种方式,您都可以使用dirs::home_dir来获取主目录。

于 2020-09-22T06:45:08.320 回答