rust_diff_analyzer/output/
github.rs1use masterror::AppError;
5
6use super::formatter::Formatter;
7use crate::{config::Config, types::AnalysisResult};
8
9pub struct GithubFormatter;
11
12impl Formatter for GithubFormatter {
13 fn format(&self, result: &AnalysisResult, _config: &Config) -> Result<String, AppError> {
14 let mut output = String::new();
15
16 output.push_str(&format!(
17 "prod_functions_changed={}\n",
18 result.summary.prod_functions
19 ));
20 output.push_str(&format!(
21 "prod_structs_changed={}\n",
22 result.summary.prod_structs
23 ));
24 output.push_str(&format!(
25 "prod_other_changed={}\n",
26 result.summary.prod_other
27 ));
28 output.push_str(&format!(
29 "test_units_changed={}\n",
30 result.summary.test_units
31 ));
32 output.push_str(&format!(
33 "prod_lines_added={}\n",
34 result.summary.prod_lines_added
35 ));
36 output.push_str(&format!(
37 "prod_lines_removed={}\n",
38 result.summary.prod_lines_removed
39 ));
40 output.push_str(&format!(
41 "test_lines_added={}\n",
42 result.summary.test_lines_added
43 ));
44 output.push_str(&format!(
45 "test_lines_removed={}\n",
46 result.summary.test_lines_removed
47 ));
48 output.push_str(&format!(
49 "weighted_score={}\n",
50 result.summary.weighted_score
51 ));
52 output.push_str(&format!("exceeds_limit={}\n", result.summary.exceeds_limit));
53
54 Ok(output)
55 }
56}
57
58#[cfg(test)]
59mod tests {
60 use super::*;
61 use crate::types::{AnalysisScope, Summary};
62
63 #[test]
64 fn test_github_format() {
65 let result = AnalysisResult::new(
66 vec![],
67 Summary {
68 prod_functions: 5,
69 prod_structs: 2,
70 prod_other: 1,
71 test_units: 10,
72 prod_lines_added: 50,
73 prod_lines_removed: 20,
74 test_lines_added: 100,
75 test_lines_removed: 30,
76 weighted_score: 23,
77 exceeds_limit: false,
78 },
79 AnalysisScope::new(),
80 );
81
82 let config = Config::default();
83 let output = GithubFormatter
84 .format(&result, &config)
85 .expect("format should succeed");
86
87 assert!(output.contains("prod_functions_changed=5"));
88 assert!(output.contains("prod_structs_changed=2"));
89 assert!(output.contains("prod_lines_added=50"));
90 assert!(output.contains("prod_lines_removed=20"));
91 assert!(output.contains("test_lines_added=100"));
92 assert!(output.contains("weighted_score=23"));
93 assert!(output.contains("exceeds_limit=false"));
94 }
95}