use rich::style::Style;
use rich::theme::Theme;
pub const EXTRA_STYLES: &[(&str, &str)] = &[
("error", "bold red"),
("warning", "yellow"),
("info", "cyan"),
("success", "bold green"),
];
pub fn extended_theme() -> Theme {
let mut theme = Theme::default_theme();
for (name, spec) in EXTRA_STYLES {
if let Ok(style) = Style::parse(spec) {
theme.insert(*name, style);
}
}
theme
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn extends_without_dropping_upstream_styles() {
let base = Theme::default_theme();
let extended = extended_theme();
assert_eq!(extended.len(), base.len() + EXTRA_STYLES.len());
assert!(extended.get("repr.number").is_some());
assert_eq!(
extended.get("error"),
Style::parse("bold red").ok().as_ref()
);
}
#[test]
fn core_theme_stays_upstream_only() {
let base = Theme::default_theme();
for (name, _) in EXTRA_STYLES {
assert!(
base.get(name).is_none(),
"{name:?} leaked into the core default theme"
);
}
}
}