ui/themes: fix attr parsing not recognizing links

async
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
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"))
}

View File

@ -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,