debtmap/comparison/
types.rs

1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, Serialize, Deserialize)]
4pub struct ComparisonResult {
5    /// Metadata about the comparison
6    pub metadata: ComparisonMetadata,
7
8    /// Target item comparison (if target specified)
9    pub target_item: Option<TargetComparison>,
10
11    /// Project-wide health comparison
12    pub project_health: ProjectHealthComparison,
13
14    /// New critical debt items (regressions)
15    pub regressions: Vec<RegressionItem>,
16
17    /// Resolved debt items (improvements)
18    pub improvements: Vec<ImprovementItem>,
19
20    /// Summary statistics
21    pub summary: ComparisonSummary,
22}
23
24#[derive(Debug, Clone, Serialize, Deserialize)]
25pub struct ComparisonMetadata {
26    pub comparison_date: String,
27    pub before_file: String,
28    pub after_file: String,
29    pub target_location: Option<String>,
30}
31
32#[derive(Debug, Clone, Serialize, Deserialize)]
33pub struct TargetComparison {
34    pub location: String,
35    #[serde(default)]
36    pub match_strategy: Option<String>,
37    #[serde(default)]
38    pub match_confidence: Option<f64>,
39    #[serde(default)]
40    pub matched_items_count: Option<usize>,
41    pub before: TargetMetrics,
42    pub after: Option<TargetMetrics>,
43    pub improvements: ImprovementMetrics,
44    pub status: TargetStatus,
45}
46
47#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
48pub struct TargetMetrics {
49    pub score: f64,
50    pub cyclomatic_complexity: u32,
51    pub cognitive_complexity: u32,
52    pub coverage: f64,
53    pub function_length: usize,
54    pub nesting_depth: u32,
55}
56
57#[derive(Debug, Clone, Serialize, Deserialize)]
58pub struct ImprovementMetrics {
59    pub score_reduction_pct: f64,
60    pub complexity_reduction_pct: f64,
61    pub coverage_improvement_pct: f64,
62}
63
64#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
65pub enum TargetStatus {
66    /// Target item completely resolved (not in after)
67    Resolved,
68    /// Target item improved
69    Improved,
70    /// Target item unchanged
71    Unchanged,
72    /// Target item regressed (got worse)
73    Regressed,
74    /// Target item not found in before
75    NotFoundBefore,
76    /// Target item not found in either
77    NotFound,
78}
79
80#[derive(Debug, Clone, Serialize, Deserialize)]
81pub struct ProjectHealthComparison {
82    pub before: ProjectMetrics,
83    pub after: ProjectMetrics,
84    pub changes: ProjectChanges,
85}
86
87#[derive(Debug, Clone, Serialize, Deserialize)]
88pub struct ProjectMetrics {
89    pub total_debt_score: f64,
90    pub total_items: usize,
91    pub critical_items: usize,      // score >= 60
92    pub high_priority_items: usize, // score >= 40
93    pub average_score: f64,
94}
95
96#[derive(Debug, Clone, Serialize, Deserialize)]
97pub struct ProjectChanges {
98    pub debt_score_change: f64,
99    pub debt_score_change_pct: f64,
100    pub items_change: i32,
101    pub critical_items_change: i32,
102}
103
104#[derive(Debug, Clone, Serialize, Deserialize)]
105pub struct RegressionItem {
106    pub location: String,
107    pub score: f64,
108    pub debt_type: String,
109    pub description: String,
110}
111
112#[derive(Debug, Clone, Serialize, Deserialize)]
113pub struct ImprovementItem {
114    pub location: String,
115    pub before_score: f64,
116    pub after_score: Option<f64>, // None if resolved
117    pub improvement_type: ImprovementType,
118}
119
120#[derive(Debug, Clone, Serialize, Deserialize)]
121pub enum ImprovementType {
122    Resolved,
123    ScoreReduced,
124    ComplexityReduced,
125    CoverageImproved,
126}
127
128#[derive(Debug, Clone, Serialize, Deserialize)]
129pub struct ComparisonSummary {
130    pub target_improved: bool,
131    pub new_critical_count: usize,
132    pub resolved_count: usize,
133    pub overall_debt_trend: DebtTrend,
134}
135
136#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
137pub enum DebtTrend {
138    Improving,  // debt decreased
139    Stable,     // debt unchanged
140    Regressing, // debt increased
141}