pretty_print/traits/
printer.rs

1use super::*;
2
3/// Marker trait for types that can be pretty printed.
4pub trait PrettyPrint {
5    /// Build a pretty tree for this type.
6    fn pretty(&self, theme: &PrettyProvider) -> PrettyTree;
7    /// Get a pretty string for this type.
8    fn pretty_string(&self, theme: &PrettyProvider) -> String {
9        let mut buffer = String::new();
10        if let Err(e) = self.pretty(&theme).render_fmt(theme.get_width(), &mut buffer) {
11            panic!("Error: {}", e);
12        }
13        buffer
14    }
15    /// Print a pretty string for this type.
16    fn pretty_colorful(&self, theme: &PrettyProvider) -> String {
17        let mut buffer = vec![];
18        if let Err(e) = self.pretty(&theme).render_colored(theme.get_width(), &mut buffer) {
19            panic!("Error: {}", e);
20        }
21        match String::from_utf8(buffer) {
22            Ok(s) => s,
23            Err(e) => panic!("Error: {}", e),
24        }
25    }
26}
27
28impl PrettyPrint for PrettyTree {
29    fn pretty(&self, _: &PrettyProvider) -> PrettyTree {
30        self.clone()
31    }
32}
33impl PrettyPrint for &'static str {
34    fn pretty(&self, _: &PrettyProvider) -> PrettyTree {
35        PrettyTree::StaticText(*self)
36    }
37}