Skip to main content

logparse_pretty_print/traits/
printer.rs

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