#serde-rs help

4 messages · Page 1 of 1 (latest)

bright radish
#

How do i apply KeyCodeSerializer to only KeyCode?

#[serde(with = "KeyCodeSerializer")]
key_map: HashMap<Control, KeyCode>,

pub mod KeyCodeSerializer {
    use serde::{de::Error, Deserialize, Deserializer, Serialize, Serializer};
    use notan::prelude::KeyCode;

    pub fn serialize<S>(v: &KeyCode, s: S) -> Result<S::Ok, S::Error> where S: Serializer {
        let v: u8 = match v {
            KeyCode::A => 1,
            KeyCode::B => 2,
        };

        v.serialize(s)
    }

    pub fn deserialize<'de, D>(d: D) -> Result<KeyCode, D::Error> where D: Deserializer<'de> {
        match u8::deserialize(d)? {
            1 => Ok(KeyCode::A),
            2 => Ok(KeyCode::B),
            o => Err(D::Error::custom(format_args!("Invalid value {}", o))),
        }
    }
}
deft arch
#

Or alternatively, use a newtype around KeyCode