weatherapi-rs 0.3.1

Small weather CLI util for weatherapi.com
Documentation
use std::fs::File;

use clap::{crate_version, Args, Command, Parser, ValueEnum};

#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, ValueEnum, Debug)]
pub enum Format {
    Json,
    Compact,
}

#[derive(Parser, Debug)]
#[command(version = crate_version!(), about = "Weather CLI tool", long_about = None)]
pub struct Cli {
    #[arg(
        short,
        required_unless_present("usage"),
        long_help = "City name e.g. London, Paris"
    )]
    pub q: Option<String>,
    #[arg(value_enum, short, long, default_value_t = Format::Compact, long_help = "Output format")]
    pub format: Format,
    #[arg(long, long_help = "Include air quality index")]
    pub aqi: bool,
    #[arg(
        long,
        long_help = "Generate usage file in KDL format (usefull to create auto-completion)"
    )]
    pub usage: bool,
}

impl Cli {
    pub fn generate_usage() {
        let cmd = Command::new("weatherapi-rs");
        let mut cmd = Cli::augment_args(cmd);

        if cfg!(debug_assertions) {
            let mut file = File::create("docs/usage.spec.kdl").unwrap();
            clap_usage::generate(&mut cmd, "weatherapi-rs", &mut file);
        } else {
            clap_usage::generate(&mut cmd, "weatherapi-rs", &mut std::io::stdout());
        }
    }
}

#[test]
fn verify_cmd() {
    let cmd = Command::new("weatherapi-rs");
    let cmd = Cli::augment_args(cmd);

    cmd.debug_assert();
}