use crate::drift::DriftReport;
use crate::manifest::Manifest;
pub fn render_check(report: &DriftReport) {
println!("service,severity,kind,message,detail");
for item in &report.drifts {
let kind = serde_json::to_value(&item.kind)
.ok()
.and_then(|v| v.as_str().map(str::to_owned))
.unwrap_or_default();
let severity = serde_json::to_value(&item.severity)
.ok()
.and_then(|v| v.as_str().map(str::to_owned))
.unwrap_or_default();
println!(
"{},{},{},{},{}",
csv_field(&item.service),
severity,
kind,
csv_field(&item.message),
csv_field(item.detail.as_deref().unwrap_or(""))
);
}
}
pub fn render_export(manifest: &Manifest) {
println!("name,language,platform,role,url,team,oncall");
for svc in &manifest.services {
println!(
"{},{},{},{},{},{},{}",
csv_field(&svc.name),
csv_field(svc.language.as_deref().unwrap_or("")),
csv_field(svc.platform.as_deref().unwrap_or("")),
csv_field(svc.role.as_deref().unwrap_or("")),
csv_field(svc.url.as_deref().unwrap_or("")),
csv_field(svc.team.as_deref().unwrap_or("")),
csv_field(svc.oncall.as_deref().unwrap_or(""))
);
}
}
fn csv_field(s: &str) -> String {
if s.contains(',') || s.contains('"') || s.contains('\n') {
format!("\"{}\"", s.replace('"', "\"\""))
} else {
s.to_owned()
}
}