Integration to choose digest with clap on a CLI.
A [clap::ValueEnum
][] implementation for the different digest algorithm
types:
```rust use clap::builder::{Arg, ArgAction, EnumValueParser}; use clap_digest::Digest;
Arg::new("digest")
.action(ArgAction::Set)
.value_parser(EnumValueParser::
Ready-to-use [clap::Arg
][] implementations:
```rust use clap::{Command, ValueEnum}; use clap_digest::{Digest, DynDigest};
let cli = Command::new("myapp") .arg(clapdigest::arg::digest().requiredunlesspresent("list-digests")) .arg(clapdigest::arg::list_digests());
let args = cli.getmatchesfrom(["myapp", "--list-digests"]);
if args.getflag("list-digests") {
for digest in Digest::valuevariants() {
println!("{digest}");
}
} else {
let digest = *args
.get_one::
todo!()
} ```
See the clap_digest::arg
module for more information.
A conversion from [clap_digest::Digest
][] to [digest::DynDigest
][]:
```rust use clap_digest::{Digest, DynDigest};
// fn doing some hashing, using any DynDigest implementation fn dynhash(hasher: &mut dyn DynDigest, data: &[u8]) -> String { hasher.update(data); let hash = hasher.finalizereset(); hash.iter().map(|byte| format!("{:02x}", byte)).collect() }
// parse user-supplied CLI input to clapdigest::Digest with clap
// suppose user runs this with: command --digest MD5
// let args = cli.getmatches();
let digest = *args.get_one::
// convert to DynDigest
let mut digest: Box
// use with hashing function let hash = dynhash(digest.asmut(), b"foo");
assert_eq!(hash, "acbd18db4cc2f85cedef654fccc4a4d8"); ```
Digest algorithm groups are feature-gated. Use cargo feature
clap-digest
for a complete listing. At least one digest algorithm
group feature must be chosen. To limit the digest algorithm families
you want to support in your crate, define your own features, e.g.:
toml
[features]
default = ["sha2"]
md5 = ["clap-digest/md5"]
sha1 = ["clap-digest/sha1"]
sha2 = ["clap-digest/sha2"]
For a complete CLI example, see examples/cksum.rs
.
```console $ cargo run --example cksum -- -d SHA1 Cargo.toml 7a96ee85606435fe1f39c3fa6bdf4cf9bbbc338c Cargo.toml
$ sha1sum Cargo.toml 7a96ee85606435fe1f39c3fa6bdf4cf9bbbc338c Cargo.toml
$ cargo run --example cksum -- -d MD5 Cargo.toml | md5sum -c Cargo.toml: OK ```
List all supported algorithms:
console
$ cargo run --example cksum -- --list-digests
BLAKE2b512
BLAKE2s256
BLAKE3
...
All algorithm groups are feature-gated, so you can choose:
console
$ cargo run --example cksum --no-default-features --features md5,sha1,sha2 -- --list-digests
MD5
SHA1
SHA224
SHA256
SHA384
SHA512
SHA512/224
SHA512/256