Skip to main content

jjpwrgem_ui/
lib.rs

1use annotate_snippets::{Renderer, renderer::DecorStyle};
2use jjpwrgem_parse::diagnostics::Diagnostic;
3
4mod pretty;
5
6#[derive(Debug, Clone, Copy, PartialEq, Eq)]
7pub enum Color {
8    Ansi,
9    Plain,
10}
11
12#[derive(Debug, Clone, Copy, PartialEq, Eq)]
13pub enum Style {
14    Pretty(Color),
15}
16
17impl Style {
18    fn get_renderer(self: Style) -> Renderer {
19        let Style::Pretty(color) = self;
20
21        match color {
22            Color::Ansi => Renderer::styled(),
23            Color::Plain => Renderer::plain(),
24        }
25        .decor_style(DecorStyle::Ascii)
26    }
27
28    pub fn render_diagnostic(self, diag: Diagnostic<'_>) -> String {
29        self.get_renderer().render(&pretty::report_diagnostic(diag))
30    }
31
32    pub fn render_message(self, m: BasicErrorMessage) -> String {
33        self.get_renderer().render(&pretty::report_message(m))
34    }
35}
36
37#[derive(Debug, PartialEq, Eq, Clone)]
38pub struct BasicErrorMessage {
39    pub error: String,
40    pub help: Option<String>,
41}