use crate::Text;
use super::*;
pub trait PrettyPrint<'a, T: Text<'a>> {
fn pretty(&self, theme: &PrettyProvider) -> PrettyTree<'a, T>;
fn pretty_string(&self, theme: &PrettyProvider) -> String {
let mut buffer = String::new();
if let Err(e) = self.pretty(theme).render_fmt(theme.get_width(), &mut buffer) {
panic!("Error: {}", e);
}
buffer
}
fn pretty_colorful(&self, theme: &PrettyProvider) -> String {
let mut buffer = vec![];
if let Err(e) = self.pretty(theme).render_colored(theme.get_width(), &mut buffer) {
panic!("Error: {}", e);
}
match String::from_utf8(buffer) {
Ok(s) => s,
Err(e) => panic!("Error: {}", e),
}
}
}
impl<'a, T: Text<'a>> PrettyPrint<'a, T> for PrettyTree<'a, T> {
fn pretty(&self, _: &PrettyProvider) -> PrettyTree<'a, T> {
self.clone()
}
}
impl<'a, T: Text<'a>> PrettyPrint<'a, T> for &'static str {
fn pretty(&self, _: &PrettyProvider) -> PrettyTree<'a, T> {
PrettyTree::Text(T::from_static_str(self))
}
}