luaur_analysis/functions/
json_escape.rs1extern 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}