patholog 1.0.0

Diagnose, explain, clean, and safely repair PATH behavior.
Documentation
use std::ffi::OsString;

use clap::{Parser, error::ErrorKind};

use super::types::{Cli, CliResult};

pub(super) fn parse_args<I, S>(argv: I) -> Result<Cli, CliResult>
where
    I: IntoIterator<Item = S>,
    S: Into<OsString>,
{
    let mut parser_argv = vec![OsString::from("patholog")];
    parser_argv.extend(argv.into_iter().map(Into::into));

    match Cli::try_parse_from(parser_argv) {
        Ok(cli) => Ok(cli),
        Err(error) if error.kind() == ErrorKind::DisplayHelp => {
            Err(CliResult::success(error.to_string()))
        }
        Err(error) if error.kind() == ErrorKind::DisplayVersion => {
            Err(CliResult::success(error.to_string()))
        }
        Err(error) => Err(CliResult::clap_error(error.to_string())),
    }
}