Skip to main content

luaur_analysis/methods/
ast_json_encoder_write_string.rs

1use crate::records::ast_json_encoder::AstJsonEncoder;
2use luaur_common::functions::format::format;
3
4impl AstJsonEncoder {
5    pub fn write_string(&mut self, sv: &str) {
6        self.write_raw_string_view("\"");
7
8        for c in sv.chars() {
9            let c_char = c as core::ffi::c_char;
10            if c == '"' {
11                self.write_raw_string_view("\\\"");
12            } else if c == '\\' {
13                self.write_raw_string_view("\\\\");
14            } else if c < ' ' {
15                let formatted = format(format_args!("\\u{:04x}", c as u32));
16                self.write_raw_string_view(&formatted);
17            } else if c == '\n' {
18                self.write_raw_string_view("\\n");
19            } else {
20                self.write_raw_c_char(c_char);
21            }
22        }
23
24        self.write_raw_string_view("\"");
25    }
26}