Integration to choose digest with clap on a CLI.
A clap::ValueEnum implementation for the different digest algorithm types:
rust
let algorithm = Arg::with_name("algorithm")
.short('a')
.long("algorithm")
.help("digest algorithm")
.takes_value(true)
// this here is the important bit:
.value_parser(clap::builder::EnumValueParser::<Digest>::new());
A conversion from clap_digest::Digest
to digest::DynDigest
:
```rust // 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 --algorithm MD5
// let args = cli.getmatches();
let digest = *args.get_one::
// convert to DynDigest
let mut digest: Box
// use with hashing function let hash = dyn_hash(&mut (*digest), b"foo");
assert_eq!(hash, "acbd18db4cc2f85cedef654fccc4a4d8"); ```
Algorithm groups are feature-gated (see example below). Use cargo feature
clap-digest
for a complete listing.
For a complete CLI example, see examples/cksum.rs
.
```console $ cargo run --example cksum -- -a SHA1 Cargo.toml 7a96ee85606435fe1f39c3fa6bdf4cf9bbbc338c Cargo.toml
$ sha1sum Cargo.toml 7a96ee85606435fe1f39c3fa6bdf4cf9bbbc338c Cargo.toml
$ cargo run --example cksum -- -a MD5 Cargo.toml | md5sum -c Cargo.toml: OK ```
List all supported algorithms:
console
$ cargo run --example cksum -- --list-algorithms
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-algorithms
MD5
SHA1
SHA224
SHA256
SHA384
SHA512
SHA512/224
SHA512/256