show_my_errors/
stylesheet.rs

1use super::Severity;
2use termcolor::{Color, ColorSpec};
3
4/// Set of styles to colorize the output
5#[derive(Clone, Debug, Default)]
6pub struct Stylesheet {
7    /// Color of [`Severity::Info`] annotations
8    pub info: ColorSpec,
9    /// Color of [`Severity::Warning`] annotations
10    pub warning: ColorSpec,
11    /// Color of [`Severity::Error`] annotations
12    pub error: ColorSpec,
13    /// Color of line numbers column
14    pub linenr: ColorSpec,
15    /// Color of filename
16    pub filename: ColorSpec,
17    /// Color of annotated line content
18    pub content: ColorSpec,
19}
20
21impl Stylesheet {
22    /// Get a monochrome stylesheet without any colors set.
23    /// This is also available via [`Default`](std::default::Default).
24    pub fn monochrome() -> Self {
25        Self::default()
26    }
27
28    /// Get a default rustc-like colored stylesheet
29    pub fn colored() -> Self {
30        let mut info = ColorSpec::new();
31        let mut warning = ColorSpec::new();
32        let mut error = ColorSpec::new();
33        let mut linenr = ColorSpec::new();
34        let mut filename = ColorSpec::new();
35        let content = ColorSpec::new();
36        info.set_bold(true);
37        warning.set_bold(true).set_fg(Some(Color::Yellow));
38        error.set_bold(true).set_fg(Some(Color::Red));
39        linenr.set_bold(true).set_fg(Some(Color::Blue));
40        filename.set_bold(true);
41        Self {
42            info,
43            warning,
44            error,
45            linenr,
46            filename,
47            content,
48        }
49    }
50
51    /// Get color of message by its [`Severity`]
52    pub fn by_severity(&self, severity: &Severity) -> &ColorSpec {
53        match severity {
54            Severity::Info => &self.info,
55            Severity::Warning => &self.warning,
56            Severity::Error => &self.error,
57        }
58    }
59}