versionman 0.1.1

CLI for incrementing project versions
Documentation
use clap::{ArgEnum, PossibleValue};

pub mod ops;

#[derive(Copy, Clone, Debug, PartialEq, Eq, PartialOrd, Ord, ArgEnum)]
pub enum VersionIncrement {
    Major,
    Minor,
    Patch,
}

impl VersionIncrement {
    pub fn possible_values() -> impl Iterator<Item = PossibleValue<'static>> {
        VersionIncrement::value_variants()
            .iter()
            .filter_map(ArgEnum::to_possible_value)
    }
}

impl std::fmt::Display for VersionIncrement {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        self.to_possible_value()
            .expect("no values are skipped")
            .get_name()
            .fmt(f)
    }
}

impl std::str::FromStr for VersionIncrement {
    type Err = String;

    fn from_str(s: &str) -> Result<Self, Self::Err> {
        for variant in Self::value_variants() {
            if variant.to_possible_value().unwrap().matches(s, false) {
                return Ok(*variant);
            }
        }
        Err(format!("Invalid variant: {}", s))
    }
}