pugio 0.2.0

A command-line dependency binary size graph visualisation tool for Rust
use colorous::Gradient;

#[cfg_attr(feature = "config", derive(serde_with::DeserializeFromStr))]
#[derive(Clone, Copy, strum::EnumString)]
#[strum(serialize_all = "kebab-case")]
pub enum NodeColoringScheme {
    CumSum,
    DepCount,
    RevDepCount,
}

impl From<NodeColoringScheme> for &'static str {
    fn from(value: NodeColoringScheme) -> Self {
        match value {
            NodeColoringScheme::CumSum => "cumulative sum",
            NodeColoringScheme::DepCount => "dependency count",
            NodeColoringScheme::RevDepCount => "reverse dependency count",
        }
    }
}

#[cfg_attr(feature = "config", derive(serde_with::DeserializeFromStr))]
#[derive(Default, Clone, strum::EnumString)]
#[strum(serialize_all = "kebab-case")]
pub enum NodeColoringGradient {
    #[default]
    Reds,
    Oranges,
    Purples,
    Greens,
    Blues,
    BuPu,
    OrRd,
    PuRd,
    RdPu,
    Viridis,
    Cividis,
    Plasma,
}

impl From<NodeColoringGradient> for Gradient {
    fn from(value: NodeColoringGradient) -> Self {
        use colorous::*;
        match value {
            NodeColoringGradient::Reds => REDS,
            NodeColoringGradient::Oranges => ORANGES,
            NodeColoringGradient::Purples => PURPLES,
            NodeColoringGradient::Greens => GREENS,
            NodeColoringGradient::Blues => BLUES,
            NodeColoringGradient::BuPu => BLUE_PURPLE,
            NodeColoringGradient::OrRd => ORANGE_RED,
            NodeColoringGradient::PuRd => PURPLE_RED,
            NodeColoringGradient::RdPu => RED_PURPLE,
            NodeColoringGradient::Viridis => VIRIDIS,
            NodeColoringGradient::Cividis => CIVIDIS,
            NodeColoringGradient::Plasma => PLASMA,
        }
    }
}

pub struct NodeColoringValues {
    pub values: Vec<usize>,
    pub gamma: f64,
    pub max: usize,
    pub gradient: Gradient,
}