use super::DisplayData;
use crate::render::Renderer;
use console::Term;
use logging_timer::time;
use serde::{Deserialize, Serialize};
use std::io::Write;
#[derive(Serialize, Deserialize, Clone, Eq, PartialEq, Debug, Default)]
pub struct Json {
pub pretty_print: bool,
}
impl Renderer for Json {
fn render(
&self,
writer: &mut dyn Write,
data: &super::DisplayData,
_term_info: Option<&Term>,
) -> anyhow::Result<()> {
let json_str = self.generate_json_str(data)?;
write!(writer, "{}", &json_str)?;
Ok(())
}
}
impl Json {
#[time("trace")]
fn generate_json_str(&self, data: &DisplayData) -> Result<String, serde_json::Error> {
if self.pretty_print {
return serde_json::to_string_pretty(data);
}
serde_json::to_string(data)
}
}