use clap_complete::{
generate_to,
shells::{Bash, Elvish, Fish, PowerShell, Zsh},
Generator,
};
use std::ffi::OsString;
use std::{env, path};
use std::io::Error;
include!("src/cli.rs");
fn main() -> Result<(), Error> {
println!("cargo:rerun-if-changed=src/cli.rs");
let out_dir = match env::var_os("OUT_DIR") {
None => return Ok(()),
Some(dir) => dir,
};
let mut cmd = build_cli();
generate_shell_completion(&mut cmd, &out_dir, Bash).unwrap();
generate_shell_completion(&mut cmd, &out_dir, PowerShell).unwrap();
generate_shell_completion(&mut cmd, &out_dir, Zsh).unwrap();
generate_shell_completion(&mut cmd, &out_dir, Fish).unwrap();
generate_shell_completion(&mut cmd, &out_dir, Elvish).unwrap();
let man = clap_mangen::Man::new(cmd);
let mut buffer: Vec<u8> = Default::default();
man.render(&mut buffer)?;
let man_page_path = path::PathBuf::from(out_dir).join("artem.1");
std::fs::write(&man_page_path, buffer)?;
println!("cargo:warning=man page is generated: {:?}", man_page_path);
Ok(())
}
fn generate_shell_completion<T>(
cmd: &mut Command,
out_dir: &OsString,
shell: T,
) -> Result<PathBuf, Error>
where
T: Generator,
{
let path = generate_to(
shell, cmd, "artem", out_dir, )?;
println!("cargo:warning=completion file is generated: {:?}", &path);
Ok(path)
}