pub mod json;
pub mod table;
use crate::diff::DiffSummary;
use clap::ValueEnum;
#[derive(Debug, Clone, Copy, PartialEq, Eq, ValueEnum, Default)]
#[value(rename_all = "snake_case")]
pub enum OutputFormat {
#[default]
Table,
Json,
}
pub trait DiffFormatter {
fn format(&self, summary: &DiffSummary) -> String;
}
#[derive(Debug, Default, Clone, Copy)]
pub struct TableFormatter;
#[derive(Debug, Default, Clone, Copy)]
pub struct JsonFormatter;
impl DiffFormatter for TableFormatter {
fn format(&self, summary: &DiffSummary) -> String {
table::render(summary)
}
}
impl DiffFormatter for JsonFormatter {
fn format(&self, summary: &DiffSummary) -> String {
json::render(summary)
}
}
impl OutputFormat {
pub fn formatter(self) -> Box<dyn DiffFormatter> {
match self {
Self::Table => Box::new(TableFormatter),
Self::Json => Box::new(JsonFormatter),
}
}
}
#[cfg(test)]
mod fixtures;
#[cfg(test)]
mod snapshot_tests;