Rustのコマンドラインパーサーでパース結果をstructに落としてくれるライブラリ
Rustのコマンドラインパーサーをどうしようか考えていて、ClapのREADMEを読んで見つけたもの。
https://gh-card.dev/repos/TeXitoi/structopt.svg https://github.com/TeXitoi/structopt
公式のREADMEを見れば使い方はすぐにわかる。structに落としてくれるため型とかの問題は全く問題なくてとても好きなスタイル。データ構造に落とすという点でScalaのscoptとかに似ているスタイル。以下に書かれてない使い方もあると思うけど、あっさりとした使い方なら以下でとても十分。-vvvみたいな数に関与するオプションもさばける様子。 code:rs
use std::path::PathBuf;
use structopt::StructOpt;
/// A basic example
struct Opt {
// A flag, true if used in the command line. Note doc comment will
// be used for the help message of the flag. The name of the
// argument will be, by default, based on the name of the field.
/// Activate debug mode
debug: bool,
// The number of occurrences of the v/verbose flag
/// Verbose mode (-v, -vv, -vvv, etc.)
verbose: u8,
/// Set speed
speed: f64,
/// Output file
output: PathBuf,
// the long option will be translated by default to kebab case,
// i.e. --nb-cars.
/// Number of cars
nb_cars: Option<i32>,
/// admin_level to consider
level: Vec<String>,
/// Files to process
files: Vec<PathBuf>,
}
fn main() {
let opt = Opt::from_args();
println!("{:#?}", opt);
}
良いところ
型が付く
フィールド名でオプションが引ける
(文字列とかで値を取り出すと、タイポなどで発見が遅れやすいバグが入り込みやすい。文字列でいいよて場合は、yargsの型定義みたいに文字列リテラルを駆使している場合など。)
フィールド名の上のコメントたちは--helpをしたときの説明文になってくれる。
内部でClapを使っているぽい
以下のStructOptのCargo.tomlを見るとClapに依存していることが分かる。