Rustのコマンドラインパーサstructoptを使う

cargo add structopt

こんな風に書いてコマンドラインから値を受け取ることができます

use structopt::StructOpt;

#[derive(StructOpt, Debug)]
struct Example {
    #[structopt(long)]
    a: String,
    #[structopt(long)]
    b: String,
}

fn main() {
    let example = Example::from_args();
    dbg!(example);
}

下記のように実行することで値が受け渡されていることがわかります

$ cargo run -- --a hoge --b hoge2
    Finished dev [unoptimized + debuginfo] target(s) in 0.02s
     Running `target/debug/result --a hoge --b hoge2`
[src/main.rs:13] example = Example {
    a: "hoge",
    b: "hoge2",
}

引数を何も指定しないとこのように必要な引数を教えてくれる

$ cargo run
    Finished dev [unoptimized + debuginfo] target(s) in 0.02s
     Running `target/debug/result`
error: The following required arguments were not provided:
    --a <a>
    --b <b>

USAGE:
    result --a <a> --b <b>

For more information try --help

余分な引数を指定するとこのようにエラーを返してくれる

$ cargo run -- --a hoge --b hoge2 -c hoge3
    Finished dev [unoptimized + debuginfo] target(s) in 0.02s
     Running `target/debug/result --a hoge --b hoge2 -c hoge3`
error: Found argument '-c' which wasn't expected, or isn't valid in this context

USAGE:
    result --a <a> --b <b>

For more information try --help

--help で使い方を表示することができ、下記は拡張できる。これはかなり良い。

$ cargo run -- --help
    Finished dev [unoptimized + debuginfo] target(s) in 0.03s
     Running `target/debug/result --help`
result 0.1.0

USAGE:
    result --a <a> --b <b>

FLAGS:
    -h, --help       Prints help information
    -V, --version    Prints version information

OPTIONS:
        --a <a>    
        --b <b>

参考

https://qiita.com/dalance/items/56dba0dd54c82f937feb

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA