use serde::{de, Deserialize, Deserializer, Serialize, Serializer}; #[derive(Clone)] pub enum Game { Ongeki, Chunithm, } impl Serialize for Game { fn serialize(&self, serializer: S) -> Result where S: Serializer, { match self { Game::Ongeki => serializer.serialize_str("ongeki"), Game::Chunithm => serializer.serialize_str("chunithm"), } } } impl<'de> Deserialize<'de> for Game { fn deserialize(deserializer: D) -> Result where D: Deserializer<'de>, { let s = String::deserialize(deserializer)?; match s.as_str() { "chunithm" => Ok(Game::Chunithm), "ongeki" => Ok(Game::Ongeki), _ => Err(de::Error::custom("unknown game")), } } }