use std::io::Write;
use serde_json::Value;
use crate::error::EngineResult;
use crate::output_pipeline::JsonOutputFormat;
pub const HELM_MAX_CHART_FILE_BYTES: usize = 5 * 1024 * 1024;
#[tracing::instrument(skip_all, fields(format = ?format))]
pub fn write_schema_json(
out: &mut impl Write,
schema: &Value,
format: JsonOutputFormat,
) -> EngineResult<()> {
match format {
JsonOutputFormat::Compact => serde_json::to_writer(&mut *out, schema)?,
JsonOutputFormat::Pretty => {
let bytes = serde_json::to_vec_pretty(schema)?;
if bytes.len() >= HELM_MAX_CHART_FILE_BYTES {
serde_json::to_writer(&mut *out, schema)?;
} else {
out.write_all(&bytes)?;
}
}
}
out.write_all(b"\n")?;
Ok(())
}
#[cfg(test)]
#[path = "tests/format.rs"]
mod tests;