Skip to main content

luaur_analysis/functions/
json_escape.rs

1extern crate alloc;
2
3use alloc::string::String;
4use core::fmt::Write;
5
6pub(crate) fn json_escape(s: &str) -> String {
7    let mut out = String::with_capacity(s.len() + 2);
8    for c in s.chars() {
9        match c {
10            '"' => out.push_str("\\\""),
11            '\\' => out.push_str("\\\\"),
12            '\x08' => out.push_str("\\b"),
13            '\x0c' => out.push_str("\\f"),
14            '\n' => out.push_str("\\n"),
15            '\r' => out.push_str("\\r"),
16            '\t' => out.push_str("\\t"),
17            _ => {
18                if (c as u32) < 0x20 {
19                    write!(out, "\\u{:04x}", c as u32).expect("String write failed");
20                } else {
21                    out.push(c);
22                }
23            }
24        }
25    }
26    out
27}