1unsafe fn change_borders(text: &mut str) {
2 let bts = text.as_bytes_mut();
3 bts[0] = b'\'';
4 bts[bts.len() - 1] = b'\'';
5}
6
7pub fn escape(src: &str) -> String {
8 let mut formatted = format!("{:?}", src).replace('\'', "\\d");
9 unsafe { change_borders(&mut formatted) }
10 formatted
11}
12
13pub fn deescape(src: String) -> String {
20 let mut result = String::new();
21 let mut chars = src.chars();
22 while let Some(symbol) = chars.next() {
23 if symbol != '\\' {
24 result.push(symbol);
25 continue;
26 }
27 let next = match chars.next() {
28 Some(val) => val,
29 _ => break,
30 };
31 let val = match next {
32 't' => '\t',
33 'r' => '\r',
34 'n' => '\n',
35 'd' => '\'',
36 '"' => '"',
37 '0' => '\0',
38 '\\' => '\\',
39 _ => panic!("unexpected escaped sequence"),
40 };
41 result.push(val)
42 }
43 result
44}