use serde::Serialize;
use std::io::IsTerminal;
#[derive(Clone, Copy, Debug, clap::ValueEnum)]
pub enum OutputMode {
Auto,
Json,
Pretty,
}
impl OutputMode {
pub fn resolve(self) -> ResolvedMode {
match self {
OutputMode::Json => ResolvedMode::Json,
OutputMode::Pretty => ResolvedMode::Pretty,
OutputMode::Auto => {
if std::io::stdout().is_terminal() {
ResolvedMode::Pretty
} else {
ResolvedMode::Json
}
}
}
}
}
#[derive(Clone, Copy, Debug)]
pub enum ResolvedMode {
Json,
Pretty,
}
pub fn emit<T: Serialize>(mode: OutputMode, value: &T) -> anyhow::Result<()> {
match mode.resolve() {
ResolvedMode::Json => {
let s = serde_json::to_string(value)?;
println!("{}", s);
}
ResolvedMode::Pretty => {
let s = serde_json::to_string_pretty(value)?;
println!("{}", s);
}
}
Ok(())
}