json_streaming/shared/
json_formatter.rs1pub trait JsonFormatter {
4 fn after_key(&self) -> &str;
6 fn after_start_nested(&mut self) -> &str;
8 fn after_element(&self) -> &str;
10 fn before_end_nested(&mut self, is_empty: bool) -> &str;
12 fn indent(&self) -> &str;
14}
15
16pub struct CompactFormatter;
18impl JsonFormatter for CompactFormatter {
19 fn after_key(&self) -> &str { "" }
20 fn after_start_nested(&mut self) -> &str { "" }
21 fn after_element(&self) -> &str { "" }
22 fn before_end_nested(&mut self, _is_empty: bool) -> &str { "" }
23 fn indent(&self) -> &str { "" }
24}
25
26pub struct PrettyFormatter {
28 indent_level: usize,
29}
30impl PrettyFormatter {
31 pub fn new() -> PrettyFormatter {
32 PrettyFormatter {
33 indent_level: 0,
34 }
35 }
36}
37impl JsonFormatter for PrettyFormatter {
38 fn after_key(&self) -> &str {
39 " "
40 }
41
42 fn after_start_nested(&mut self) -> &str {
43 self.indent_level += 1;
44 ""
45 }
46
47 fn after_element(&self) -> &str {
48 ""
49 }
50
51 fn before_end_nested(&mut self, is_empty: bool) -> &str {
52 self.indent_level -= 1;
53 if is_empty {
54 ""
55 }
56 else {
57 self.indent()
58 }
59 }
60
61 fn indent(&self) -> &str {
62 static INDENT: &'static str = "\n ";
63 &INDENT[..2*self.indent_level + 1]
64 }
65}