ouisync/
debug.rs

1#[derive(Clone)]
2pub struct DebugPrinter {
3    // Used for indentation
4    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        // https://stackoverflow.com/a/42273813/273348
18        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}