thirdpass 0.3.3

A multi-ecosystem package code review system.
#[derive(
    Debug, Clone, Hash, Eq, PartialEq, Ord, PartialOrd, serde::Serialize, serde::Deserialize,
)]
#[serde(rename_all = "lowercase")]
pub enum SecuritySummary {
    Critical,
    Medium,
    Low,
    None,
}

impl Default for SecuritySummary {
    fn default() -> Self {
        SecuritySummary::None
    }
}

impl std::str::FromStr for SecuritySummary {
    type Err = anyhow::Error;
    fn from_str(input: &str) -> Result<SecuritySummary, Self::Err> {
        match input {
            "critical" => Ok(SecuritySummary::Critical),
            "medium" => Ok(SecuritySummary::Medium),
            "low" => Ok(SecuritySummary::Low),
            "none" => Ok(SecuritySummary::None),
            _ => Err(anyhow::format_err!(
                "Failed to parse security summary from string: {}",
                input
            )),
        }
    }
}

impl std::fmt::Display for SecuritySummary {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        write!(f, "{}", format!("{:?}", self).to_lowercase())
    }
}