use {
crate::errors::InvalidSkinError,
crokey::crossterm::style::Color,
lazy_regex::*,
rustc_hash::FxHashMap,
std::convert::TryFrom,
termimad::parse_color,
};
#[derive(Debug, Clone, Default)]
pub struct ExtColorMap {
map: FxHashMap<String, Color>,
}
impl ExtColorMap {
pub fn get(
&self,
ext: &str,
) -> Option<Color> {
self.map.get(ext).copied()
}
pub fn set(
&mut self,
ext: String,
raw_color: &str,
) -> Result<(), InvalidSkinError> {
if !regex_is_match!("^none$"i, raw_color) {
let color = parse_color(raw_color)?;
self.map.insert(ext, color);
}
Ok(())
}
}
impl TryFrom<&FxHashMap<String, String>> for ExtColorMap {
type Error = InvalidSkinError;
fn try_from(raw_map: &FxHashMap<String, String>) -> Result<Self, Self::Error> {
let mut map = ExtColorMap::default();
for (k, v) in raw_map {
map.set(k.to_string(), v)?;
}
Ok(map)
}
}