summaryrefslogtreecommitdiffstats
path: root/ui
diff options
context:
space:
mode:
authorManos Pitsidianakis <el13635@mail.ntua.gr>2020-01-24 09:19:57 +0200
committerManos Pitsidianakis <el13635@mail.ntua.gr>2020-01-24 09:19:57 +0200
commiteedb03dcd01950bd5a32d452862b22fbb836543b (patch)
treec1523ae6afe9e1c4f5c6fd4d37818c86d917f34d /ui
parentfc4b9f891985d354b1133a8f959f19cb7a7eed99 (diff)
ui/themes: fix attr parsing not recognizing links
Diffstat (limited to 'ui')
-rw-r--r--ui/src/conf/themes.rs8
-rw-r--r--ui/src/terminal/cells.rs31
2 files changed, 26 insertions, 13 deletions
diff --git a/ui/src/conf/themes.rs b/ui/src/conf/themes.rs
index 60794bc6..9a113689 100644
--- a/ui/src/conf/themes.rs
+++ b/ui/src/conf/themes.rs
@@ -232,8 +232,12 @@ impl<'de> Deserialize<'de> for ThemeValue<Attr> {
where
D: Deserializer<'de>,
{
- if let Ok(s) = <Attr>::deserialize(deserializer) {
- Ok(ThemeValue::Value(s))
+ if let Ok(s) = <String>::deserialize(deserializer) {
+ if let Ok(c) = Attr::from_string_de::<'de, D>(s.clone()) {
+ Ok(ThemeValue::Value(c))
+ } else {
+ Ok(ThemeValue::Link(s.into()))
+ }
} else {
Err(de::Error::custom("invalid theme attribute value"))
}
diff --git a/ui/src/terminal/cells.rs b/ui/src/terminal/cells.rs
index 58b5c806..b8291d71 100644
--- a/ui/src/terminal/cells.rs
+++ b/ui/src/terminal/cells.rs
@@ -1397,17 +1397,7 @@ impl<'de> Deserialize<'de> for Attr {
D: Deserializer<'de>,
{
if let Ok(s) = <String>::deserialize(deserializer) {
- match s.as_str() {
- "Default" => Ok(Attr::Default),
- "Bold" => Ok(Attr::Bold),
- "Underline" => Ok(Attr::Underline),
- "BoldUnderline" => Ok(Attr::BoldUnderline),
- "Reverse" => Ok(Attr::Reverse),
- "BoldReverse" => Ok(Attr::BoldReverse),
- "UnderlineReverse" => Ok(Attr::UnderlineReverse),
- "BoldReverseUnderline" => Ok(Attr::BoldReverseUnderline),
- _ => Err(de::Error::custom("invalid attr value")),
- }
+ Attr::from_string_de::<'de, D>(s)
} else {
Err(de::Error::custom("invalid attr value"))
}
@@ -1432,6 +1422,25 @@ impl Serialize for Attr {
}
}
+impl Attr {
+ pub fn from_string_de<'de, D>(s: String) -> std::result::Result<Self, D::Error>
+ where
+ D: Deserializer<'de>,
+ {
+ match s.as_str() {
+ "Default" => Ok(Attr::Default),
+ "Bold" => Ok(Attr::Bold),
+ "Underline" => Ok(Attr::Underline),
+ "BoldUnderline" => Ok(Attr::BoldUnderline),
+ "Reverse" => Ok(Attr::Reverse),
+ "BoldReverse" => Ok(Attr::BoldReverse),
+ "UnderlineReverse" => Ok(Attr::UnderlineReverse),
+ "BoldReverseUnderline" => Ok(Attr::BoldReverseUnderline),
+ _ => Err(de::Error::custom("invalid attr value")),
+ }
+ }
+}
+
pub fn copy_area_with_break(
grid_dest: &mut CellBuffer,
grid_src: &CellBuffer,