Skip to content

Commit 74a829a

Browse files
committed
refactor: coloring module
1 parent e405e95 commit 74a829a

File tree

3 files changed

+74
-72
lines changed

3 files changed

+74
-72
lines changed

src/coloring.rs

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
use colorgrad::BasisGradient;
2+
3+
#[cfg_attr(feature = "config", derive(serde_with::DeserializeFromStr))]
4+
#[derive(Clone, Copy, strum::EnumString)]
5+
#[strum(serialize_all = "kebab-case")]
6+
pub enum NodeColoringScheme {
7+
CumSum,
8+
DepCount,
9+
RevDepCount,
10+
}
11+
12+
impl From<NodeColoringScheme> for &'static str {
13+
fn from(value: NodeColoringScheme) -> Self {
14+
match value {
15+
NodeColoringScheme::CumSum => "cumulative sum",
16+
NodeColoringScheme::DepCount => "dependency count",
17+
NodeColoringScheme::RevDepCount => "reverse dependency count",
18+
}
19+
}
20+
}
21+
22+
#[cfg_attr(feature = "config", derive(serde_with::DeserializeFromStr))]
23+
#[derive(Default, Clone)]
24+
pub enum NodeColoringGradient {
25+
#[default]
26+
Reds,
27+
Oranges,
28+
Purples,
29+
Greens,
30+
Blues,
31+
Custom(BasisGradient),
32+
}
33+
34+
impl std::str::FromStr for NodeColoringGradient {
35+
type Err = colorgrad::GradientBuilderError;
36+
37+
fn from_str(s: &str) -> Result<NodeColoringGradient, Self::Err> {
38+
match s {
39+
"reds" => Ok(Self::Reds),
40+
"oranges" => Ok(Self::Oranges),
41+
"purples" => Ok(Self::Purples),
42+
"greens" => Ok(Self::Greens),
43+
"blues" => Ok(Self::Blues),
44+
_ => colorgrad::GradientBuilder::new()
45+
.css(s)
46+
.build()
47+
.map(Self::Custom),
48+
}
49+
}
50+
}
51+
52+
impl From<NodeColoringGradient> for BasisGradient {
53+
fn from(value: NodeColoringGradient) -> Self {
54+
use colorgrad::preset::*;
55+
match value {
56+
NodeColoringGradient::Reds => reds(),
57+
NodeColoringGradient::Oranges => oranges(),
58+
NodeColoringGradient::Purples => purples(),
59+
NodeColoringGradient::Greens => greens(),
60+
NodeColoringGradient::Blues => blues(),
61+
NodeColoringGradient::Custom(gradient) => gradient,
62+
}
63+
}
64+
}
65+
66+
pub struct NodeColoringValues {
67+
pub values: Vec<usize>,
68+
pub gamma: f32,
69+
pub max: usize,
70+
pub gradient: BasisGradient,
71+
}

src/config.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use clap::Args;
44
#[cfg(feature = "config")]
55
use serde::de;
66

7-
use crate::{NodeColoringGradient, NodeColoringScheme};
7+
use crate::coloring::{NodeColoringGradient, NodeColoringScheme};
88

99
// Obfuscate type for clap
1010
type OptScheme = Option<NodeColoringScheme>;

src/main.rs

Lines changed: 2 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
mod cargo;
2+
mod coloring;
23
mod config;
34
mod dot;
45
mod graph;
56
mod template;
67

78
use crate::{
89
cargo::{CargoOptions, cargo_bloat_output, cargo_tree_output, get_dep_graph, get_size_map},
10+
coloring::{NodeColoringScheme, NodeColoringValues},
911
config::Config,
1012
dot::{output_dot, output_svg},
1113
graph::{
@@ -16,70 +18,6 @@ use crate::{
1618
};
1719
use anyhow::Context;
1820
use clap::Parser;
19-
use colorgrad::BasisGradient;
20-
21-
#[cfg_attr(feature = "config", derive(serde_with::DeserializeFromStr))]
22-
#[derive(Clone, Copy, strum::EnumString)]
23-
#[strum(serialize_all = "kebab-case")]
24-
enum NodeColoringScheme {
25-
CumSum,
26-
DepCount,
27-
RevDepCount,
28-
}
29-
30-
impl From<NodeColoringScheme> for &'static str {
31-
fn from(value: NodeColoringScheme) -> Self {
32-
match value {
33-
NodeColoringScheme::CumSum => "cumulative sum",
34-
NodeColoringScheme::DepCount => "dependency count",
35-
NodeColoringScheme::RevDepCount => "reverse dependency count",
36-
}
37-
}
38-
}
39-
40-
#[cfg_attr(feature = "config", derive(serde_with::DeserializeFromStr))]
41-
#[derive(Default, Clone)]
42-
enum NodeColoringGradient {
43-
#[default]
44-
Reds,
45-
Oranges,
46-
Purples,
47-
Greens,
48-
Blues,
49-
Custom(BasisGradient),
50-
}
51-
52-
impl std::str::FromStr for NodeColoringGradient {
53-
type Err = colorgrad::GradientBuilderError;
54-
55-
fn from_str(s: &str) -> Result<NodeColoringGradient, Self::Err> {
56-
match s {
57-
"reds" => Ok(Self::Reds),
58-
"oranges" => Ok(Self::Oranges),
59-
"purples" => Ok(Self::Purples),
60-
"greens" => Ok(Self::Greens),
61-
"blues" => Ok(Self::Blues),
62-
_ => colorgrad::GradientBuilder::new()
63-
.css(s)
64-
.build()
65-
.map(Self::Custom),
66-
}
67-
}
68-
}
69-
70-
impl From<NodeColoringGradient> for BasisGradient {
71-
fn from(value: NodeColoringGradient) -> Self {
72-
use colorgrad::preset::*;
73-
match value {
74-
NodeColoringGradient::Reds => reds(),
75-
NodeColoringGradient::Oranges => oranges(),
76-
NodeColoringGradient::Purples => purples(),
77-
NodeColoringGradient::Greens => greens(),
78-
NodeColoringGradient::Blues => blues(),
79-
NodeColoringGradient::Custom(gradient) => gradient,
80-
}
81-
}
82-
}
8321

8422
#[derive(Parser)]
8523
#[command(version, about, long_about = None)]
@@ -94,13 +32,6 @@ struct Args {
9432
config: Config,
9533
}
9634

97-
struct NodeColoringValues {
98-
values: Vec<usize>,
99-
gamma: f32,
100-
max: usize,
101-
gradient: BasisGradient,
102-
}
103-
10435
fn main() -> anyhow::Result<()> {
10536
let args = Args::parse();
10637

0 commit comments

Comments
 (0)