ui/themes: fix attr parsing not recognizing links

master
Manos Pitsidianakis 2020-01-24 09:19:57 +02:00
parent fc4b9f8919
commit eedb03dcd0
Signed by: Manos Pitsidianakis
GPG Key ID: 73627C2F690DF710
2 changed files with 26 additions and 13 deletions

View File

@ -232,8 +232,12 @@ impl<'de> Deserialize<'de> for ThemeValue<Attr> {
where where
D: Deserializer<'de>, D: Deserializer<'de>,
{ {
if let Ok(s) = <Attr>::deserialize(deserializer) { if let Ok(s) = <String>::deserialize(deserializer) {
Ok(ThemeValue::Value(s)) if let Ok(c) = Attr::from_string_de::<'de, D>(s.clone()) {
Ok(ThemeValue::Value(c))
} else {
Ok(ThemeValue::Link(s.into()))
}
} else { } else {
Err(de::Error::custom("invalid theme attribute value")) Err(de::Error::custom("invalid theme attribute value"))
} }

View File

@ -1397,17 +1397,7 @@ impl<'de> Deserialize<'de> for Attr {
D: Deserializer<'de>, D: Deserializer<'de>,
{ {
if let Ok(s) = <String>::deserialize(deserializer) { if let Ok(s) = <String>::deserialize(deserializer) {
match s.as_str() { Attr::from_string_de::<'de, D>(s)
"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")),
}
} else { } else {
Err(de::Error::custom("invalid attr value")) 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( pub fn copy_area_with_break(
grid_dest: &mut CellBuffer, grid_dest: &mut CellBuffer,
grid_src: &CellBuffer, grid_src: &CellBuffer,