use serde::Serialize;
#[derive(Debug, Clone, Copy, PartialEq, Eq, clap::ValueEnum, Default)]
pub enum OutputFormat {
#[default]
Plain,
Table,
Json,
}
pub trait Render: Serialize {
fn render_plain(&self) -> String;
fn render_table(&self) -> String {
self.render_plain()
}
fn render(&self, fmt: OutputFormat) -> String {
match fmt {
OutputFormat::Plain => self.render_plain(),
OutputFormat::Table => self.render_table(),
OutputFormat::Json => serde_json::to_string_pretty(self)
.unwrap_or_else(|e| format!("{{\"error\": \"{e}\"}}",)),
}
}
fn print(&self, fmt: OutputFormat) {
println!("{}", self.render(fmt));
}
}