Revert "Remove serde_string! macro in favor of #[derive(Serialize, Deserialize)]"

This reverts commit 038e5eb493.

This is to fix handling of `#[strum(default)]` variants.
This commit is contained in:
Mingwei Samuel 2022-06-20 09:40:28 -07:00
parent 20863c5bcc
commit 104db04d9d
8 changed files with 36 additions and 15 deletions

View file

@ -1,7 +1,6 @@
use std::cmp::Ordering;
use num_enum::{ IntoPrimitive, TryFromPrimitive };
use serde::{ Serialize, Deserialize };
use strum::IntoEnumIterator;
use strum_macros::{ EnumString, Display, AsRefStr, IntoStaticStr };
@ -16,7 +15,6 @@ use strum_macros::{ EnumString, Display, AsRefStr, IntoStaticStr };
#[derive(Eq, PartialEq, Hash)]
#[derive(EnumString, Display, AsRefStr, IntoStaticStr)]
#[derive(IntoPrimitive, TryFromPrimitive)]
#[derive(Serialize, Deserialize)]
#[repr(u8)]
pub enum Division {
/// Division 1, the best/highest division in a [`Tier`](crate::consts::Tier), or the only division in
@ -33,6 +31,8 @@ pub enum Division {
V = 5,
}
serde_string!(Division);
/// Returns a DoubleEndedIterator of I, II, III, IV.
/// Ordered from high rank (I) to low (IV).
/// Excludes V, which is deprecated.

View file

@ -6,7 +6,6 @@
// //
///////////////////////////////////////////////
use serde::{ Serialize, Deserialize };
use strum_macros::{ EnumString, IntoStaticStr };
/// League of Legends game mode, such as Classic,
@ -15,7 +14,6 @@ use strum_macros::{ EnumString, IntoStaticStr };
#[derive(Debug, Clone)]
#[derive(Eq, PartialEq, Hash)]
#[derive(EnumString, IntoStaticStr)]
#[derive(Serialize, Deserialize)]
#[repr(u8)]
pub enum GameMode {
/// Catch-all variant for new, unknown game modes.
@ -73,3 +71,4 @@ pub enum GameMode {
}
string_enum_str!(GameMode);
serde_string!(GameMode);

View file

@ -6,14 +6,12 @@
// //
///////////////////////////////////////////////
use serde::{ Serialize, Deserialize };
use strum_macros::{ EnumString, Display, AsRefStr, IntoStaticStr };
/// League of Legends game type: matched game, custom game, or tutorial game.
#[derive(Debug, Copy, Clone)]
#[derive(Eq, PartialEq, Hash)]
#[derive(EnumString, Display, AsRefStr, IntoStaticStr)]
#[derive(Serialize, Deserialize)]
#[repr(u8)]
pub enum GameType {
/// Custom games
@ -23,3 +21,5 @@ pub enum GameType {
/// Tutorial games
TUTORIAL_GAME,
}
serde_string!(GameType);

View file

@ -1,5 +1,28 @@
#![macro_use]
macro_rules! serde_string {
( $name:ident ) => {
impl<'de> serde::de::Deserialize<'de> for $name {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: serde::de::Deserializer<'de>
{
let s = String::deserialize(deserializer)?;
s.parse().map_err(serde::de::Error::custom)
}
}
impl serde::ser::Serialize for $name {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: serde::ser::Serializer,
{
serializer.serialize_str(self.as_ref())
}
}
};
}
macro_rules! string_enum_str {
( $name:ident ) => {
impl AsRef<str> for $name {

View file

@ -1,4 +1,3 @@
use serde::{ Serialize, Deserialize };
use strum_macros::{ EnumString, Display, AsRefStr, IntoStaticStr };
/// LoL or TFT ranked queue types.
@ -6,7 +5,6 @@ use strum_macros::{ EnumString, Display, AsRefStr, IntoStaticStr };
#[derive(Debug, Clone)]
#[derive(Eq, PartialEq, Hash)]
#[derive(EnumString, Display, AsRefStr, IntoStaticStr)]
#[derive(Serialize, Deserialize)]
pub enum QueueType {
/// Catch-all variant for new, unknown queue types.
#[strum(default)]
@ -30,6 +28,8 @@ pub enum QueueType {
RANKED_TFT_PAIRS,
}
serde_string!(QueueType);
#[cfg(test)]
mod test {
use super::*;

View file

@ -1,6 +1,5 @@
use num_enum::{ IntoPrimitive, TryFromPrimitive };
use serde::{ Serialize, Deserialize };
use strum::IntoEnumIterator;
use num_enum::{ IntoPrimitive, TryFromPrimitive };
use strum_macros::{ EnumString, Display, AsRefStr, IntoStaticStr };
/// LoL and TFT ranked tiers, such as gold, diamond, challenger, etc.
@ -14,7 +13,6 @@ use strum_macros::{ EnumString, Display, AsRefStr, IntoStaticStr };
#[derive(Eq, PartialEq, Hash, PartialOrd, Ord)]
#[derive(IntoPrimitive, TryFromPrimitive)]
#[derive(EnumString, Display, AsRefStr, IntoStaticStr)]
#[derive(Serialize, Deserialize)]
#[repr(u8)]
pub enum Tier {
/// Challenger, the highest tier, an apex tier. Repr: `220_u8`.
@ -42,6 +40,8 @@ pub enum Tier {
UNRANKED = 0,
}
serde_string!(Tier);
impl Tier {
/// If this tier is an apex tier: [`Self::MASTER`], [`Self::GRANDMASTER`],
/// or [`Self::CHALLENGER`]. Returns false for [`Self::UNRANKED`].

View file

@ -3,7 +3,6 @@
const gameModes = require('./.gameModes.json');
}}{{= dotUtils.preamble() }}
use serde::{ Serialize, Deserialize };
use strum_macros::{ EnumString, IntoStaticStr };
/// League of Legends game mode, such as Classic,
@ -12,7 +11,6 @@ use strum_macros::{ EnumString, IntoStaticStr };
#[derive(Debug, Clone)]
#[derive(Eq, PartialEq, Hash)]
#[derive(EnumString, IntoStaticStr)]
#[derive(Serialize, Deserialize)]
#[repr(u8)]
pub enum GameMode {
/// Catch-all variant for new, unknown game modes.
@ -33,3 +31,4 @@ pub enum GameMode {
}
string_enum_str!(GameMode);
serde_string!(GameMode);

View file

@ -3,14 +3,12 @@
const gameTypes = require('./.gameTypes.json');
}}{{= dotUtils.preamble() }}
use serde::{ Serialize, Deserialize };
use strum_macros::{ EnumString, Display, AsRefStr, IntoStaticStr };
/// League of Legends game type: matched game, custom game, or tutorial game.
#[derive(Debug, Copy, Clone)]
#[derive(Eq, PartialEq, Hash)]
#[derive(EnumString, Display, AsRefStr, IntoStaticStr)]
#[derive(Serialize, Deserialize)]
#[repr(u8)]
pub enum GameType {
{{
@ -25,3 +23,5 @@ pub enum GameType {
}
}}
}
serde_string!(GameType);