From bf7280554a22ed21f517ef315ceff265906c69e8 Mon Sep 17 00:00:00 2001 From: Sven-Hendrik Haase Date: Mon, 21 Feb 2022 00:50:39 +0100 Subject: [PATCH] Add man page support using --print-manpage (fixes #730) --- Cargo.lock | 33 +++++++++++++++++++++++++-------- Cargo.toml | 1 + src/args.rs | 4 ++++ src/main.rs | 7 +++++++ 4 files changed, 37 insertions(+), 8 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 5e0872b..d0811a7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -337,9 +337,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.53" +version = "1.0.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94a45b455c14666b85fc40a019e8ab9eb75e3a124e05494f5397122bc9eb06e0" +checksum = "7a99269dff3bc004caa411f38845c20303f1e393ca2bd6581576fa3a7f59577d" [[package]] name = "askama_escape" @@ -618,6 +618,16 @@ dependencies = [ "syn", ] +[[package]] +name = "clap_mangen" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0649fb4156bbd7306896025005596033879a2051f9a3aa7416ab915df1f8fdac" +dependencies = [ + "clap 3.1.0", + "roff", +] + [[package]] name = "codemap" version = "0.1.3" @@ -1270,9 +1280,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.118" +version = "0.2.119" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06e509672465a0504304aa87f9f176f2b2b716ed8fb105ebe5c02dc6dce96a94" +checksum = "1bf2e165bb3457c8e098ea76f3e3bc9db55f87aa90d52d0e6be741470916aaa4" [[package]] name = "libflate" @@ -1429,6 +1439,7 @@ dependencies = [ "chrono-humanize", "clap 3.1.0", "clap_complete", + "clap_mangen", "futures", "get_if_addrs", "grass", @@ -2076,6 +2087,12 @@ version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3582f63211428f83597b51b2ddb88e2a91a9d52d12831f9d08f5e624e8977422" +[[package]] +name = "roff" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b833d8d034ea094b1ea68aa6d5c740e0d04bad9d16568d08ba6f76823a114316" + [[package]] name = "rstest" version = "0.12.0" @@ -2100,9 +2117,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.20.3" +version = "0.20.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b323592e3164322f5b193dc4302e4e36cd8d37158a712d664efae1a5c2791700" +checksum = "4fbfeb8d0ddb84706bc597a5574ab8912817c52a397f819e5b614e2265206921" dependencies = [ "log", "ring", @@ -2586,9 +2603,9 @@ checksum = "360dfd1d6d30e05fda32ace2c8c70e9c0a9da713275777f5a4dbb8a1893930c6" [[package]] name = "tracing" -version = "0.1.30" +version = "0.1.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d8d93354fe2a8e50d5953f5ae2e47a3fc2ef03292e7ea46e3cc38f549525fb9" +checksum = "f6c650a8ef0cd2dd93736f033d21cbd1224c5a967aa0c258d00fcf7dafef9b9f" dependencies = [ "cfg-if", "pin-project-lite", diff --git a/Cargo.toml b/Cargo.toml index 7f45b56..930f551 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -31,6 +31,7 @@ nanoid = "0.4" alphanumeric-sort = "1" clap = { version = "3.0.7", features = ["derive", "cargo", "wrap_help"] } clap_complete = "3.0.3" +clap_mangen = "0.1" chrono = "0.4" chrono-humanize = "0.2" serde = { version = "1", features = ["derive"] } diff --git a/src/args.rs b/src/args.rs index 77925a2..841db3a 100644 --- a/src/args.rs +++ b/src/args.rs @@ -156,6 +156,10 @@ pub struct CliArgs { #[clap(long = "print-completions", value_name = "shell", arg_enum)] pub print_completions: Option, + /// Generate man page + #[clap(long = "print-manpage")] + pub print_manpage: bool, + /// TLS certificate to use #[cfg(feature = "tls")] #[clap(long = "tls-cert", requires = "tls-key", value_hint = ValueHint::FilePath)] diff --git a/src/main.rs b/src/main.rs index 63a620d..de10d7d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -40,6 +40,13 @@ fn main() -> Result<()> { return Ok(()); } + if args.print_manpage { + let clap_app = args::CliArgs::command(); + let man = clap_mangen::Man::new(clap_app); + man.render(&mut io::stdout())?; + return Ok(()); + } + let miniserve_config = MiniserveConfig::try_from_args(args)?; run(miniserve_config).map_err(|e| {