cargo_coupling/balance/
rationale.rs1#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
2pub enum GradeDimension {
3 Strength,
5 Distance,
7 Volatility,
9}
10
11impl std::fmt::Display for GradeDimension {
12 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
13 match self {
14 GradeDimension::Strength => write!(f, "strength"),
15 GradeDimension::Distance => write!(f, "distance"),
16 GradeDimension::Volatility => write!(f, "volatility"),
17 }
18 }
19}
20
21#[derive(Debug, Clone, PartialEq, Eq)]
23pub struct IssueTypeContribution {
24 pub issue_type: IssueType,
26 pub count: usize,
28 pub highest_severity: Severity,
30}
31
32#[derive(Debug, Clone, PartialEq, Eq)]
34pub struct GradeRationale {
35 pub summary: String,
37 pub top_issue_types: Vec<IssueTypeContribution>,
39 pub dominant_dimension: Option<GradeDimension>,
41 pub volatility_note: Option<String>,
43}
44
45impl GradeRationale {
46 pub fn empty() -> Self {
48 Self {
49 summary: "No surfaced coupling issues; grade reflects low issue density.".to_string(),
50 top_issue_types: Vec::new(),
51 dominant_dimension: None,
52 volatility_note: None,
53 }
54 }
55}
56
57use super::issue_type::IssueType;
59use super::severity::Severity;