use crate::{providers::PrettyProvider, DocumentTree};
use alloc::string::String;
use termcolor::Buffer;
pub trait PrettyPrint {
fn build(&self, allocator: &PrettyProvider) -> DocumentTree;
fn pretty_string(&self, width: usize) -> String {
let arena = PrettyProvider::new();
let mut buffer = Buffer::ansi();
if let Err(e) = self.build(&arena).render(width, &mut buffer) {
return alloc::format!("Error: {}", e);
}
unsafe { String::from_utf8_unchecked(buffer.into_inner()) }
}
#[cfg(feature = "std")]
fn pretty_print(&self, width: usize) {
let arena = PrettyProvider::new();
let mut buffer = Buffer::ansi();
match self.build(&arena).render_colored(width, &mut buffer) {
Ok(_) => {
println!("{}", unsafe { String::from_utf8_unchecked(buffer.into_inner()) });
}
Err(e) => {
eprintln!("Error: {}", e);
}
}
}
}