1#[derive(Clone)]
2pub struct DebugPrinter {
3 level: usize,
5 prefix: String,
6}
7
8impl DebugPrinter {
9 pub fn new() -> Self {
10 Self {
11 level: 0,
12 prefix: "".into(),
13 }
14 }
15
16 pub fn debug<T: std::fmt::Debug>(&self, v: &T) {
17 println!(
19 "{}{:indent$}{:?}",
20 self.prefix,
21 "",
22 v,
23 indent = (2 * self.level)
24 );
25 }
26
27 pub fn display<T: std::fmt::Display>(&self, v: &T) {
28 println!(
29 "{}{:indent$}{}",
30 self.prefix,
31 "",
32 v,
33 indent = (2 * self.level)
34 );
35 }
36
37 pub fn indent(&self) -> Self {
38 Self {
39 level: self.level + 1,
40 prefix: self.prefix.clone(),
41 }
42 }
43
44 pub fn prefix(mut self, p: &str) -> Self {
45 self.prefix = p.into();
46 self
47 }
48}
49
50impl Default for DebugPrinter {
51 fn default() -> Self {
52 DebugPrinter::new()
53 }
54}