Migrate "hagrid-delete" from StructOpt to Clap v4 derive based API. Clean up code along the way.

Changes:
- Add "derive" and "unicode" features for "clap" in Cargo.toml.
- Remove dependency on "structopt" crate from Cargo.toml.
- Update Cargo.lock.
- Rename crate::delete::cli::Opt struct to Cli.
- Replace usage of #[structopt()] macros with #[derive(Parser)].
- Rename variables and function parameters from "opt" to "cli"
  accordingly.
- Don't parse opt.query in dispatch_cmd function. As Opt.query field
  type was replaced from String to Query in Cli.query new version of
  Clap automatically determines value_parser and calls FromStr::from_str
  implementation to convert str slice into field of type Query.
- Replace improrts of structopt::StructOpt with clap::Parser.
This commit is contained in:
Zeke Fast
2025-05-04 08:52:13 +02:00
parent 0027a25486
commit 5757ac2819
4 changed files with 68 additions and 205 deletions

237
Cargo.lock generated
View File

@@ -88,15 +88,6 @@ dependencies = [
"libc",
]
[[package]]
name = "ansi_term"
version = "0.12.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2"
dependencies = [
"winapi",
]
[[package]]
name = "anstream"
version = "0.6.18"
@@ -185,8 +176,8 @@ version = "0.3.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d"
dependencies = [
"proc-macro2 1.0.89",
"quote 1.0.37",
"proc-macro2",
"quote",
"syn 2.0.87",
]
@@ -196,8 +187,8 @@ version = "0.1.83"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd"
dependencies = [
"proc-macro2 1.0.89",
"quote 1.0.37",
"proc-macro2",
"quote",
"syn 2.0.87",
]
@@ -216,17 +207,6 @@ dependencies = [
"bytemuck",
]
[[package]]
name = "atty"
version = "0.2.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
dependencies = [
"hermit-abi 0.1.19",
"libc",
"winapi",
]
[[package]]
name = "autocfg"
version = "0.1.8"
@@ -419,21 +399,6 @@ dependencies = [
"inout",
]
[[package]]
name = "clap"
version = "2.34.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c"
dependencies = [
"ansi_term",
"atty",
"bitflags 1.3.2",
"strsim 0.8.0",
"textwrap",
"unicode-width 0.1.14",
"vec_map",
]
[[package]]
name = "clap"
version = "4.5.37"
@@ -453,7 +418,7 @@ dependencies = [
"anstream",
"anstyle",
"clap_lex",
"strsim 0.11.1",
"strsim",
"unicase 2.6.0",
"unicode-width 0.2.0",
]
@@ -464,9 +429,9 @@ version = "4.5.32"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "09176aae279615badda0765c0c0b3f6ed53f4709118af73cf4655d85d1530cd7"
dependencies = [
"heck 0.5.0",
"proc-macro2 1.0.89",
"quote 1.0.37",
"heck",
"proc-macro2",
"quote",
"syn 2.0.87",
]
@@ -597,7 +562,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "71b28680d8be17a570a2334922518be6adc3f58ecc880cbb404eaeb8624fd867"
dependencies = [
"devise_core",
"quote 1.0.37",
"quote",
]
[[package]]
@@ -607,9 +572,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b035a542cf7abf01f2e3c4d5a7acbaebfefe120ae4efc7bde3df98186e4b8af7"
dependencies = [
"bitflags 2.6.0",
"proc-macro2 1.0.89",
"proc-macro2",
"proc-macro2-diagnostics",
"quote 1.0.37",
"quote",
"syn 2.0.87",
]
@@ -1003,8 +968,8 @@ checksum = "649db3b5cda06091ea6aacb9f66f7002dfe885505b324b8ed795261253ffc2b3"
dependencies = [
"gettext",
"gettext-utils",
"proc-macro2 1.0.89",
"quote 1.0.37",
"proc-macro2",
"quote",
"syn 1.0.109",
]
@@ -1069,6 +1034,7 @@ dependencies = [
"anyhow",
"base64 0.10.1",
"chrono",
"clap",
"gettext",
"gettext-macros",
"gettext-utils",
@@ -1089,7 +1055,6 @@ dependencies = [
"serde_derive",
"serde_json",
"sha2",
"structopt",
"tempfile",
"time 0.1.45",
"url",
@@ -1131,7 +1096,7 @@ version = "0.1.0"
dependencies = [
"anyhow",
"base64 0.10.1",
"clap 4.5.37",
"clap",
"fs2",
"hagrid-database",
"hex",
@@ -1190,30 +1155,12 @@ dependencies = [
"hashbrown 0.14.5",
]
[[package]]
name = "heck"
version = "0.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c"
dependencies = [
"unicode-segmentation",
]
[[package]]
name = "heck"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
[[package]]
name = "hermit-abi"
version = "0.1.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
dependencies = [
"libc",
]
[[package]]
name = "hermit-abi"
version = "0.3.9"
@@ -1553,7 +1500,7 @@ dependencies = [
"string_cache",
"term",
"tiny-keccak",
"unicode-xid 0.2.6",
"unicode-xid",
"walkdir",
]
@@ -1987,8 +1934,8 @@ version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
dependencies = [
"proc-macro2 1.0.89",
"quote 1.0.37",
"proc-macro2",
"quote",
"syn 2.0.87",
]
@@ -2056,9 +2003,9 @@ version = "0.2.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4bab5b985dc082b345f812b7df84e1bef27e7207b39e448439ba8bd69c93f147"
dependencies = [
"proc-macro2 1.0.89",
"proc-macro2",
"proc-macro2-diagnostics",
"quote 1.0.37",
"quote",
"syn 2.0.87",
]
@@ -2103,8 +2050,8 @@ checksum = "eb55586734301717aea2ac313f50b2eb8f60d2fc3dc01d190eefa2e625f60c4e"
dependencies = [
"pest",
"pest_meta",
"proc-macro2 1.0.89",
"quote 1.0.37",
"proc-macro2",
"quote",
"syn 2.0.87",
]
@@ -2237,15 +2184,6 @@ version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c"
[[package]]
name = "proc-macro2"
version = "0.4.30"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759"
dependencies = [
"unicode-xid 0.1.0",
]
[[package]]
name = "proc-macro2"
version = "1.0.89"
@@ -2261,8 +2199,8 @@ version = "0.10.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8"
dependencies = [
"proc-macro2 1.0.89",
"quote 1.0.37",
"proc-macro2",
"quote",
"syn 2.0.87",
"version_check 0.9.5",
"yansi",
@@ -2288,22 +2226,13 @@ version = "1.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0"
[[package]]
name = "quote"
version = "0.6.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6ce23b6b870e8f94f81fb0a363d65d86675884b34a09043c81e5562f11c1f8e1"
dependencies = [
"proc-macro2 0.4.30",
]
[[package]]
name = "quote"
version = "1.0.37"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af"
dependencies = [
"proc-macro2 1.0.89",
"proc-macro2",
]
[[package]]
@@ -2514,8 +2443,8 @@ version = "1.0.23"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bcc303e793d3734489387d205e9b186fac9c6cfacedd98cbb2e8a5943595f3e6"
dependencies = [
"proc-macro2 1.0.89",
"quote 1.0.37",
"proc-macro2",
"quote",
"syn 2.0.87",
]
@@ -2610,11 +2539,11 @@ dependencies = [
"devise",
"glob",
"indexmap",
"proc-macro2 1.0.89",
"quote 1.0.37",
"proc-macro2",
"quote",
"rocket_http",
"syn 2.0.87",
"unicode-xid 0.2.6",
"unicode-xid",
"version_check 0.9.5",
]
@@ -2823,8 +2752,8 @@ version = "1.0.215"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ad1e866f866923f252f05c889987993144fb74e722403468a4ebd70c3cd756c0"
dependencies = [
"proc-macro2 1.0.89",
"quote 1.0.37",
"proc-macro2",
"quote",
"syn 2.0.87",
]
@@ -2968,65 +2897,26 @@ dependencies = [
"precomputed-hash",
]
[[package]]
name = "strsim"
version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
[[package]]
name = "strsim"
version = "0.11.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f"
[[package]]
name = "structopt"
version = "0.2.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "16c2cdbf9cc375f15d1b4141bc48aeef444806655cd0e904207edc8d68d86ed7"
dependencies = [
"clap 2.34.0",
"structopt-derive",
]
[[package]]
name = "structopt-derive"
version = "0.2.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "53010261a84b37689f9ed7d395165029f9cc7abb9f56bbfe86bee2597ed25107"
dependencies = [
"heck 0.3.3",
"proc-macro2 0.4.30",
"quote 0.6.13",
"syn 0.15.44",
]
[[package]]
name = "subtle"
version = "2.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292"
[[package]]
name = "syn"
version = "0.15.44"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9ca4b3b69a77cbe1ffc9e198781b7acb0c7365a883670e8f1c1bc66fba79a5c5"
dependencies = [
"proc-macro2 0.4.30",
"quote 0.6.13",
"unicode-xid 0.1.0",
]
[[package]]
name = "syn"
version = "1.0.109"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
dependencies = [
"proc-macro2 1.0.89",
"quote 1.0.37",
"proc-macro2",
"quote",
"unicode-ident",
]
@@ -3036,8 +2926,8 @@ version = "2.0.87"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "25aa4ce346d03a6dcd68dd8b4010bcb74e54e62c90c573f394c46eae99aba32d"
dependencies = [
"proc-macro2 1.0.89",
"quote 1.0.37",
"proc-macro2",
"quote",
"unicode-ident",
]
@@ -3071,7 +2961,7 @@ version = "0.1.0"
dependencies = [
"anyhow",
"base64 0.10.1",
"clap 4.5.37",
"clap",
"fs2",
"hex",
"idna 0.1.5",
@@ -3086,15 +2976,6 @@ dependencies = [
"url",
]
[[package]]
name = "textwrap"
version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
dependencies = [
"unicode-width 0.1.14",
]
[[package]]
name = "thiserror"
version = "1.0.69"
@@ -3110,8 +2991,8 @@ version = "1.0.69"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1"
dependencies = [
"proc-macro2 1.0.89",
"quote 1.0.37",
"proc-macro2",
"quote",
"syn 2.0.87",
]
@@ -3227,8 +3108,8 @@ version = "2.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752"
dependencies = [
"proc-macro2 1.0.89",
"quote 1.0.37",
"proc-macro2",
"quote",
"syn 2.0.87",
]
@@ -3322,8 +3203,8 @@ version = "0.1.27"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7"
dependencies = [
"proc-macro2 1.0.89",
"quote 1.0.37",
"proc-macro2",
"quote",
"syn 2.0.87",
]
@@ -3472,12 +3353,6 @@ dependencies = [
"tinyvec",
]
[[package]]
name = "unicode-segmentation"
version = "1.12.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493"
[[package]]
name = "unicode-width"
version = "0.1.14"
@@ -3490,12 +3365,6 @@ version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1fc81956842c57dac11422a97c3b8195a1ff727f06e85c84ed2e8aa277c9a0fd"
[[package]]
name = "unicode-xid"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc"
[[package]]
name = "unicode-xid"
version = "0.2.6"
@@ -3578,12 +3447,6 @@ version = "0.2.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
[[package]]
name = "vec_map"
version = "0.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191"
[[package]]
name = "vergen"
version = "3.2.0"
@@ -3658,8 +3521,8 @@ dependencies = [
"bumpalo",
"log 0.4.22",
"once_cell",
"proc-macro2 1.0.89",
"quote 1.0.37",
"proc-macro2",
"quote",
"syn 2.0.87",
"wasm-bindgen-shared",
]
@@ -3670,7 +3533,7 @@ version = "0.2.95"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e79384be7f8f5a9dd5d7167216f022090cf1f9ec128e6e6a482a2cb5c5422c56"
dependencies = [
"quote 1.0.37",
"quote",
"wasm-bindgen-macro-support",
]
@@ -3680,8 +3543,8 @@ version = "0.2.95"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "26c6ab57572f7a24a4985830b120de1594465e5d500f24afe89e16b4e833ef68"
dependencies = [
"proc-macro2 1.0.89",
"quote 1.0.37",
"proc-macro2",
"quote",
"syn 2.0.87",
"wasm-bindgen-backend",
"wasm-bindgen-shared",
@@ -3936,7 +3799,7 @@ version = "0.7.35"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e"
dependencies = [
"proc-macro2 1.0.89",
"quote 1.0.37",
"proc-macro2",
"quote",
"syn 2.0.87",
]

View File

@@ -51,7 +51,6 @@ serde = "1.0"
serde_derive = "1"
serde_json = "1"
sha2 = "0.10"
structopt = "0.2"
tempfile = "3"
time = "0.1"
toml = "0.5"
@@ -76,7 +75,6 @@ serde_derive = { workspace = true }
serde_json = { workspace = true }
time = { workspace = true }
tempfile = { workspace = true }
structopt = { workspace = true }
url = { workspace = true }
num_cpus = { workspace = true }
aes-gcm = { workspace = true }
@@ -92,6 +90,7 @@ hyperx = { workspace = true }
# this is a slightly annoying update, so keeping this back for now
lettre = { workspace = true, features = ["builder", "file-transport", "sendmail-transport", "smtp-transport"] }
rocket_i18n= { workspace = true, features = ["rocket"] }
clap = { workspace = true, features = ["derive", "unicode"] }
[build-dependencies]
vergen = { workspace = true }

View File

@@ -1,32 +1,33 @@
use structopt::StructOpt;
use std::path::PathBuf;
use hagrid_database::KeyDatabase;
use clap::Parser;
use hagrid_database::{KeyDatabase, Query};
#[derive(Debug, StructOpt)]
#[structopt(
#[derive(Parser)]
#[command(
version,
name = "hagrid-delete",
about = "Deletes (address, key)-binding(s), and/or a key(s)."
about = "Deletes (address, key)-binding(s), and/or a key(s).",
long_about = None,
)]
pub(crate) struct Opt {
pub(crate) struct Cli {
/// Base directory.
#[structopt(parse(from_os_str))]
pub(crate) base: PathBuf,
/// E-Mail address, Fingerprint, or KeyID of the TPK to delete.
/// If a Fingerprint or KeyID is given, --all is implied.
pub(crate) query: String,
pub(crate) query: Query,
#[arg(long)]
/// Also delete all bindings.
#[structopt(long = "all-bindings")]
pub(crate) all_bindings: bool,
#[arg(long)]
/// Also delete all bindings and the key.
#[structopt(long = "all")]
pub(crate) all: bool,
}
pub(crate) fn dispatch_cmd(opts: &Opt, db: &KeyDatabase) -> anyhow::Result<()> {
crate::delete::delete(&db, &opts.query.parse()?, opts.all_bindings, opts.all)
pub(crate) fn dispatch_cmd(cli: &Cli, db: &KeyDatabase) -> anyhow::Result<()> {
crate::delete::delete(db, &cli.query, cli.all_bindings, cli.all)
}
pub(crate) fn print_errors(e: anyhow::Error) {

View File

@@ -3,7 +3,7 @@
mod cli;
mod delete;
use structopt::StructOpt;
use clap::Parser;
use hagrid_database::KeyDatabase;
const ERROR_EXIT_CODE: i32 = 2;
@@ -15,8 +15,8 @@ fn main() {
}
fn run() -> anyhow::Result<()> {
let opt = &cli::Opt::from_args();
let db = &KeyDatabase::new_file(opt.base.canonicalize()?)?;
let cli = &cli::Cli::parse();
let db = &KeyDatabase::new_file(cli.base.canonicalize()?)?;
cli::dispatch_cmd(opt, db)
cli::dispatch_cmd(cli, db)
}