sway-de-utils/build.rs
2026-01-24 14:50:25 -08:00

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(())
}