37 lines
1.2 KiB
Rust
37 lines
1.2 KiB
Rust
use clap::{CommandFactory, command};
|
|
use clap_complete::{
|
|
generate_to,
|
|
shells::{Bash, Elvish, Fish, Zsh},
|
|
};
|
|
use flate2::{Compression, write::GzEncoder};
|
|
use std::io::{Error, prelude::Write};
|
|
use std::{env, path::PathBuf};
|
|
|
|
include!("src/lib/cli.rs");
|
|
|
|
fn main() -> Result<(), Error> {
|
|
let out_dir = match env::var_os("OUT_DIR") {
|
|
None => return Ok(()),
|
|
Some(o) => o,
|
|
};
|
|
|
|
let mut cmd = Cli::command();
|
|
let bin_name = "sdu";
|
|
let bash_path = generate_to(Bash, &mut cmd, bin_name, &out_dir)?;
|
|
let zsh_path = generate_to(Zsh, &mut cmd, bin_name, &out_dir)?;
|
|
let fish_path = generate_to(Fish, &mut cmd, bin_name, &out_dir)?;
|
|
let elvish_path = generate_to(Elvish, &mut cmd, bin_name, &out_dir)?;
|
|
|
|
println!(
|
|
"cargo:warning=completion files were generated: [ {bash_path:?}, {zsh_path:?}, {fish_path:?}, {elvish_path:?} ]"
|
|
);
|
|
let out_dir_buf: PathBuf = out_dir.into();
|
|
let woman = clap_mangen::Man::new(cmd);
|
|
let mut buffer: Vec<u8> = Default::default();
|
|
woman.render(&mut buffer)?;
|
|
let mut e = GzEncoder::new(Vec::new(), Compression::default());
|
|
e.write_all(&buffer)?;
|
|
std::fs::write(out_dir_buf.join("sdu.1.gz"), e.finish()?)?;
|
|
|
|
Ok(())
|
|
}
|