use clap::ValueEnum;
use super::{
Renderer, TableOptions,
csv::CsvRenderer,
json::JsonRenderer,
lines::LinesRenderer,
progress::{HumanProgress, JsonProgress, ProgressReporter},
prose::ProseRenderer,
tsv::TsvRenderer,
};
#[derive(Clone, Copy, Debug, PartialEq, Eq, ValueEnum)]
pub enum Format {
#[value(name = "prose")]
Prose,
#[value(name = "json")]
Json,
#[value(name = "lines")]
Lines,
#[value(name = "csv")]
Csv,
#[value(name = "tsv")]
Tsv,
}
impl Format {
pub fn into_renderer(self) -> Box<dyn Renderer> {
self.into_renderer_with_options(TableOptions::default())
}
pub fn into_renderer_with_options(self, opts: TableOptions) -> Box<dyn Renderer> {
match self {
Format::Prose => Box::new(ProseRenderer::new()),
Format::Json => Box::new(JsonRenderer::new()),
Format::Lines => Box::new(LinesRenderer::new().with_options(opts)),
Format::Csv => Box::new(CsvRenderer::new().with_options(opts)),
Format::Tsv => Box::new(TsvRenderer::new().with_options(opts)),
}
}
pub fn into_progress_reporter(self) -> Box<dyn ProgressReporter> {
match self {
Format::Json => Box::new(JsonProgress::new()),
Format::Prose | Format::Lines | Format::Csv | Format::Tsv => {
Box::new(HumanProgress::new())
}
}
}
}