cli_engine/output/
json.rs1use crate::Result;
2
3use super::Envelope;
4
5pub fn render_json(envelope: &Envelope) -> Result<String> {
10 envelope.serialization_result()?;
11 let mut rendered = serde_json::to_string_pretty(envelope)?;
12 rendered = escape_html_sensitive_json_chars(&rendered);
13 rendered.push('\n');
14 Ok(rendered)
15}
16
17fn escape_html_sensitive_json_chars(json: &str) -> String {
18 let mut escaped = String::with_capacity(json.len());
19 for character in json.chars() {
20 match character {
21 '<' => escaped.push_str("\\u003c"),
22 '>' => escaped.push_str("\\u003e"),
23 '&' => escaped.push_str("\\u0026"),
24 '\u{2028}' => escaped.push_str("\\u2028"),
25 '\u{2029}' => escaped.push_str("\\u2029"),
26 _ => escaped.push(character),
27 }
28 }
29 escaped
30}