use crate::{providers::PrettyProvider, PrettyTree};
use alloc::string::String;
pub trait PrettyBuilder {
fn flat_alt<E>(self, inline: E) -> PrettyTree
where
E: Into<PrettyTree>;
fn indent(self, indent: usize) -> PrettyTree;
}
pub trait PrettyPrint {
fn pretty(&self, theme: &PrettyProvider) -> PrettyTree;
fn pretty_string(&self, width: usize) -> String {
let arena = PrettyProvider::new();
let mut buffer = String::new();
if let Err(e) = self.pretty(&arena).render_fmt(width, &mut buffer) {
return alloc::format!("Error: {}", e);
}
buffer
}
#[cfg(feature = "std")]
fn pretty_print(&self, width: usize) {
let arena = PrettyProvider::new();
let mut buffer = std::io::stdout().lock();
match self.pretty(&arena).render_colored(width, &mut buffer) {
Ok(_) => {
}
Err(e) => {
eprintln!("Error: {}", e);
}
}
}
}
impl PrettyPrint for &'static str {
fn pretty(&self, _: &PrettyProvider) -> PrettyTree {
PrettyTree::StaticText(*self)
}
}