use serde_json::Value;
pub struct Output {
pub json: bool,
}
impl Output {
pub fn new(json: bool) -> Self {
Output { json }
}
pub fn data(&self, value: Value, human_label: &str) -> anyhow::Result<()> {
if self.json {
println!("{}", serde_json::to_string_pretty(&value)?);
} else {
let data = value.get("data").cloned().unwrap_or(value);
println!("{human_label}:");
println!("{}", serde_json::to_string_pretty(&data)?);
}
Ok(())
}
pub fn ok(&self, message: impl Into<String>) -> anyhow::Result<()> {
let msg = message.into();
if self.json {
let v = serde_json::json!({ "status": "ok", "message": msg });
println!("{}", serde_json::to_string_pretty(&v)?);
} else {
println!("{msg}");
}
Ok(())
}
}