use crate::Diagnostic;
pub mod graphical;
pub use graphical::*;
pub struct Formatter<'a> {
inner: &'a mut dyn std::fmt::Write,
}
impl std::fmt::Write for Formatter<'_> {
fn write_str(&mut self, s: &str) -> std::fmt::Result {
self.inner.write_str(s)
}
}
pub trait Renderer {
fn render(&mut self, diagnostic: &dyn Diagnostic) -> Result<String, std::fmt::Error> {
let mut buffer = String::new();
let mut formatter = Formatter { inner: &mut buffer };
self.render_fmt(&mut formatter, diagnostic)?;
Ok(buffer)
}
fn render_stderr(&mut self, diagnostic: &dyn Diagnostic) -> std::fmt::Result {
eprint!("{}", self.render(diagnostic)?);
Ok(())
}
fn render_fmt(&mut self, f: &mut Formatter, diagnostic: &dyn Diagnostic) -> std::fmt::Result;
}