reactive_graph/shared/manpages/
generate.rs

1use crate::shared::manpages::error::ManPagesGenerationError;
2use clap::Command;
3use std::fs::create_dir_all;
4use std::path::PathBuf;
5
6fn generate_man_pages(cmd: Command) -> Result<String, ManPagesGenerationError> {
7    let man = clap_mangen::Man::new(cmd);
8    let mut buffer: Vec<u8> = Default::default();
9    man.render(&mut buffer)?;
10
11    let man_page = String::from_utf8(buffer).map_err(ManPagesGenerationError::Utf8)?;
12    Ok(man_page)
13}
14
15pub fn print_man_pages(cmd: Command) -> Result<(), ManPagesGenerationError> {
16    let man_page = generate_man_pages(cmd)?;
17    println!("{man_page}");
18    Ok(())
19}
20
21pub fn install_man_pages(cmd: Command) -> Result<(), ManPagesGenerationError> {
22    let bin_name = cmd.get_name().to_string();
23    let path: PathBuf = format!("/usr/share/man/man1/{bin_name}.1").into();
24
25    if let Some(parent) = path.parent() {
26        create_dir_all(parent).map_err(ManPagesGenerationError::Io)?;
27    }
28
29    eprintln!("Writing man pages to {}", path.display());
30
31    let man_page = generate_man_pages(cmd)?;
32    std::fs::write(path, man_page).map_err(ManPagesGenerationError::Io)?;
33    Ok(())
34}