付録Aclapの新しいAPI

中山 光樹

本付録は日本語版オリジナルの記事です。本書ではclapのバージョン2系を使ってきましたが、バージョン3系からはDerive APIと呼ばれる新しいAPIを利用できるようになりました。そこで、本稿ではclapのDerive APIについて簡単に紹介します。

A.1 Builder APIとDerive API

本書でコマンドライン引数の解析のために書いてきたclapの書き方は、Builder APIと呼ばれています。それに対して、clapの新しいバージョンではDerive APIと呼ばれる書き方をできるようになりました。次のコードは、「3章 catコマンド」のコマンドライン引数を解析するコードとそれをDerive APIで書き直したものです。

Builder APIによるコードは次に示すとおりです。

use clap::{App, Arg};

#[derive(Debug)]
pub struct Config {
    files: Vec<String>,
    number_lines: bool,
    number_nonblank_lines: bool,
}

pub fn get_args() -> MyResult<Config> {
    let matches = App::new("catr")
        .version("0.1.0")
        .author("Ken Youens-Clark <kyclark@gmail.com>")
        .about("Rust cat")
        .arg(
            Arg::with_name("files")
                .value_name("FILE")
                .help("Input file(s)")
                .multiple ...

Get Rustの練習帳 ―コマンドラインツールの作成を通してRustを学ぶ now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.