dictate 0.9.0

CLI utility for looking up words in online dictionary
Documentation
use std::{env, fs, io, path::PathBuf};

use clap::CommandFactory;
use clap_complete::Shell;

include!("src/cli.rs");

struct CompletionGenerator {
    outdir: PathBuf,
    command: clap::Command,
}

impl CompletionGenerator {
    fn new() -> Self {
        Self {
            outdir: PathBuf::from(
                env::var_os("OUT_DIR").expect("`OUT_DIR` should be set during compilation"),
            ),
            command: Cli::command(),
        }
    }

    fn generate(&self, shell: Shell) -> Result<PathBuf, io::Error> {
        let directory = &self.outdir.join(shell.to_string());
        fs::create_dir_all(directory)?;

        clap_complete::generate_to(shell, &mut self.command.clone(), "dictate", directory)
    }
}

fn main() -> Result<(), io::Error> {
    println!("cargo:rerun-if-changed=src/cli.rs");

    let generator = CompletionGenerator::new();
    generator.generate(Shell::Bash)?;
    generator.generate(Shell::Elvish)?;
    generator.generate(Shell::Fish)?;
    generator.generate(Shell::PowerShell)?;
    generator.generate(Shell::Zsh)?;

    Ok(())
}