//! Constant data and Enums used with the Riot Games API. //! //! This module uses SCREAMING_SNAKE_CASE for enum variants, as enums in this //! crate should be considered collections of constants. #![allow(deprecated)] #![allow(non_camel_case_types)] mod macros; #[rustfmt::skip] mod champion; pub use champion::*; mod division; pub use division::*; #[rustfmt::skip] mod game_mode; pub use game_mode::*; #[rustfmt::skip] mod game_type; pub use game_type::*; #[rustfmt::skip] mod map; pub use map::*; #[rustfmt::skip] mod queue_type; pub use queue_type::*; #[rustfmt::skip] mod queue; pub use queue::*; pub mod ranks; #[rustfmt::skip] mod route; pub use route::*; mod route_ext; pub use route_ext::*; #[rustfmt::skip] mod season; pub use season::*; /// Trait allowing iteration of enum types, implemented by several enums in this module. /// Re-exported from strum. pub use strum::IntoEnumIterator; mod team; pub use team::*; mod tier; pub use tier::*; /// https://github.com/RiotGames/developer-relations/issues/898 pub(crate) fn serialize_empty_string_none<S, T>( val: &Option<T>, serializer: S, ) -> Result<S::Ok, S::Error> where S: serde::ser::Serializer, T: serde::ser::Serialize, { use serde::ser::Serialize; if let Some(val) = val { val.serialize(serializer) } else { "".serialize(serializer) } } /// https://github.com/RiotGames/developer-relations/issues/898 pub(crate) fn deserialize_empty_string_none<'de, D, T>( deserializer: D, ) -> Result<Option<T>, D::Error> where D: serde::de::Deserializer<'de>, T: serde::de::Deserialize<'de>, { use serde::de::{Deserialize, IntoDeserializer}; let opt = Option::<String>::deserialize(deserializer)?; match opt.as_deref() { None | Some("") => Ok(None), Some(s) => T::deserialize(s.into_deserializer()).map(Some), } }