2026-10-27 toasty-cli を 1 つの bin で使う
散歩。雨上がり。地面は濡れている。半そでじゃなくて良かった。
crates:toasty 。 migration の管理のためのインタフェースが crates:toasty-cli という別 crate で clap を使っているのだけど、自分の bin にどう組み込んでいいのか迷う構造になっていた。 examples には migration のためだけに別 bin を追加する方法が示されているが、 cargo run のたびに --bin 指定したくないので、自分の bin に強引に組み込んだ。組み込み方が正しいのかよく分からない。 ::toasty_cli::MigrationCommand が pub なので、それを引数に取るようにしる。単純に parse_and_run すると引数の位置がおかしくなる (?) ので parse_from に std::env::args を入れる。あれこれやっていたので、余計な記述もあるかもしれない。妙なのは一回 parse した command を捨てて、改めて topcoat_cli に parse させる点。こうしておかないと一回目の parse で引数などがエラーになってしまう。想定した使い方なのか……これ。
#[derive(::clap::Subcommand)]
enum Command {
// ...
Migration(::toasty_cli::MigrationCommand),
// ...
}
// ...
Command::Migration(_) => {
let args = std::env::args();
let db = crate::setup_db().await?;
let toasty_cli = ::toasty_cli::ToastyCli::new(db);
toasty_cli.parse_from(args).await?;
}
今日のコミット。