diff options
author | Manos Pitsidianakis <el13635@mail.ntua.gr> | 2020-01-24 16:05:25 +0200 |
---|---|---|
committer | Manos Pitsidianakis <el13635@mail.ntua.gr> | 2020-01-24 16:05:25 +0200 |
commit | 5230ce2d033a61750702488722252cd76cef5295 (patch) | |
tree | 643f0f49185fde60a7f3f1577dfc612c85906810 /ui/src/conf/themes.rs | |
parent | ab0b4f51689a326f31297dfe97d66357f5efa894 (diff) |
ui/themes: load other themes from ./themes/ dir
Diffstat (limited to 'ui/src/conf/themes.rs')
-rw-r--r-- | ui/src/conf/themes.rs | 36 |
1 files changed, 23 insertions, 13 deletions
diff --git a/ui/src/conf/themes.rs b/ui/src/conf/themes.rs index eb66e808..8d2a3754 100644 --- a/ui/src/conf/themes.rs +++ b/ui/src/conf/themes.rs @@ -251,7 +251,7 @@ impl<T: Serialize> Serialize for ThemeValue<T> { { match self { ThemeValue::Value(s) => s.serialize(serializer), - _ => unreachable!(), + ThemeValue::Link(s) => serializer.serialize_str(s.as_ref()), } } } @@ -560,14 +560,15 @@ impl Serialize for Theme { { let mut dark: HashMap<Cow<'static, str>, ThemeAttribute> = Default::default(); let mut light: HashMap<Cow<'static, str>, ThemeAttribute> = Default::default(); + let mut other_themes: HashMap<String, _> = Default::default(); for k in self.dark.keys() { dark.insert( k.clone(), ThemeAttribute { - fg: unlink_fg(&self.light, k), - bg: unlink_bg(&self.light, k), - attrs: unlink_attrs(&self.light, k), + fg: unlink_fg(&self.dark, k), + bg: unlink_bg(&self.dark, k), + attrs: unlink_attrs(&self.dark, k), }, ); } @@ -583,16 +584,25 @@ impl Serialize for Theme { ); } - #[derive(Serialize)] - struct ThemeSer { - light: HashMap<Cow<'static, str>, ThemeAttribute>, - dark: HashMap<Cow<'static, str>, ThemeAttribute>, + for (name, t) in self.other_themes.iter() { + let mut new_map: HashMap<Cow<'static, str>, ThemeAttribute> = Default::default(); + + for k in t.keys() { + new_map.insert( + k.clone(), + ThemeAttribute { + fg: unlink_fg(&t, k), + bg: unlink_bg(&t, k), + attrs: unlink_attrs(&t, k), + }, + ); + } + other_themes.insert(name.to_string(), new_map); } - use serde::ser::SerializeStruct; - let mut s = serializer.serialize_struct("ThemeSer", 2)?; - s.serialize_field("light", &light)?; - s.serialize_field("dark", &dark)?; - s.end() + + other_themes.insert("light".to_string(), light); + other_themes.insert("dark".to_string(), dark); + other_themes.serialize(serializer) } } |