Simplify Key deserializer

pull/53/head
Takashi Kokubun 2 years ago
parent 16094de2cf
commit 6de99ec863
No known key found for this signature in database
GPG Key ID: 6FFC433B12EE23DD

@ -1,32 +1,14 @@
use evdev::Key;
use serde::de::Visitor;
use serde::Deserializer;
use serde::{Deserialize, Deserializer};
use std::error::Error;
use std::fmt;
use std::str::FromStr;
pub fn deserialize_key<'de, D>(deserializer: D) -> Result<evdev::Key, D::Error>
pub fn deserialize_key<'de, D>(deserializer: D) -> Result<Key, D::Error>
where
D: Deserializer<'de>,
{
struct KeyVisitor;
impl<'de> Visitor<'de> for KeyVisitor {
type Value = evdev::Key;
fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
formatter.write_str("string")
}
fn visit_str<E>(self, value: &str) -> Result<Self::Value, E>
where
E: serde::de::Error,
{
Ok(parse_key(value).map_err(serde::de::Error::custom)?)
}
}
deserializer.deserialize_any(KeyVisitor)
let key = String::deserialize(deserializer)?;
Ok(parse_key(&key).map_err(serde::de::Error::custom)?)
}
pub fn parse_key(input: &str) -> Result<Key, Box<dyn Error>> {

Loading…
Cancel
Save