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}