use std::{
collections::BTreeMap,
path::{Path, PathBuf},
};
use tabled::{builder::Builder, settings::Style};
use super::ReporterOutput;
use crate::{parser::InjectAction, processor::InjectStatus};
pub struct Output {}
impl Output {}
impl ReporterOutput for Output {
fn start(&mut self) {}
fn end(&mut self) {}
fn report(&self, root_folder: &Path, result: &BTreeMap<PathBuf, InjectStatus>) {
let mut builder = Builder::default();
builder.push_record(["Path", "Action", "Snippet ID", ""]);
for (file, status) in result {
let path_view = std::fs::canonicalize(root_folder)
.map(|absolute_path| file.strip_prefix(absolute_path).unwrap_or(file))
.unwrap_or(file);
match status {
InjectStatus::Injected(summary) => {
for action in &summary.actions {
match action {
InjectAction::Equal { snippet_id } => {
builder.push_record([
format!("{}", path_view.display()),
"equal".to_string(),
snippet_id.to_string(),
String::new(),
]);
}
InjectAction::Injected {
snippet_id,
content: _,
} => {
builder.push_record([
format!("{}", path_view.display()),
"injected".to_string(),
snippet_id.to_string(),
String::new(),
]);
}
InjectAction::NotFound { snippet_id } => {
builder.push_record([
format!("{}", path_view.display()),
"not-found-snippets".to_string(),
snippet_id.to_string(),
String::new(),
]);
}
}
}
}
InjectStatus::None => (),
InjectStatus::Error(error) => {
builder.push_record([
format!("{}", path_view.display()),
"error".to_string(),
String::new(),
error.to_string(),
]);
}
}
}
println!("{}", builder.build().with(Style::modern()));
}
}