mirror of
https://github.com/MingweiSamuel/Riven.git
synced 2024-12-27 03:16:33 +00:00
Generate region enums
This commit is contained in:
parent
0753fe1b34
commit
08e276a558
5 changed files with 498 additions and 230 deletions
|
@ -34,6 +34,9 @@ pub mod ranks;
|
||||||
mod route;
|
mod route;
|
||||||
pub use route::*;
|
pub use route::*;
|
||||||
|
|
||||||
|
mod route_ext;
|
||||||
|
pub use route_ext::*;
|
||||||
|
|
||||||
mod season;
|
mod season;
|
||||||
pub use season::*;
|
pub use season::*;
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,11 @@
|
||||||
|
///////////////////////////////////////////////
|
||||||
|
// //
|
||||||
|
// ! //
|
||||||
|
// This file is automatically generated! //
|
||||||
|
// Do not directly edit! //
|
||||||
|
// //
|
||||||
|
///////////////////////////////////////////////
|
||||||
|
|
||||||
use num_enum::{ IntoPrimitive, TryFromPrimitive };
|
use num_enum::{ IntoPrimitive, TryFromPrimitive };
|
||||||
use strum_macros::{ EnumString, EnumIter, Display, IntoStaticStr };
|
use strum_macros::{ EnumString, EnumIter, Display, IntoStaticStr };
|
||||||
|
|
||||||
|
@ -10,20 +18,40 @@ use strum_macros::{ EnumString, EnumIter, Display, IntoStaticStr };
|
||||||
#[repr(u8)]
|
#[repr(u8)]
|
||||||
#[non_exhaustive]
|
#[non_exhaustive]
|
||||||
pub enum RegionalRoute {
|
pub enum RegionalRoute {
|
||||||
/// Americas.
|
/// North and South America.
|
||||||
|
///
|
||||||
|
/// `1` (riotapi-schema ID/repr)
|
||||||
AMERICAS = 1,
|
AMERICAS = 1,
|
||||||
|
|
||||||
/// Asia.
|
/// Asia, used for LoL matches (`match-v5`) and TFT matches (`tft-match-v1`).
|
||||||
|
///
|
||||||
|
/// `2` (riotapi-schema ID/repr)
|
||||||
ASIA = 2,
|
ASIA = 2,
|
||||||
|
|
||||||
/// Europe.
|
/// Europe.
|
||||||
|
///
|
||||||
|
/// `3` (riotapi-schema ID/repr)
|
||||||
EUROPE = 3,
|
EUROPE = 3,
|
||||||
|
|
||||||
/// Southeast Asia. Only usable with the LoR endpoints.
|
/// South East Asia, used for LoR, LoL matches (`match-v5`), and TFT matches (`tft-match-v1`).
|
||||||
|
///
|
||||||
|
/// `4` (riotapi-schema ID/repr)
|
||||||
SEA = 4,
|
SEA = 4,
|
||||||
|
|
||||||
|
/// Asia-Pacific, deprecated, for some old matches in `lor-match-v1`.
|
||||||
|
///
|
||||||
|
/// `10` (riotapi-schema ID/repr)
|
||||||
|
#[deprecated]
|
||||||
|
APAC = 10,
|
||||||
|
|
||||||
|
/// Special esports platform for `account-v1`. Do not confuse with the `esports` Valorant platform route.
|
||||||
|
///
|
||||||
|
/// `11` (riotapi-schema ID/repr)
|
||||||
|
ESPORTS = 11,
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Platform routes for League of Legends and Teamfight Tactics.
|
/// Platform routes for League of Legends (LoL), Teamfight Tactics (TFT), and Legends of Runeterra (LoR).
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
#[derive(PartialEq, Eq, Hash, PartialOrd, Ord)]
|
#[derive(PartialEq, Eq, Hash, PartialOrd, Ord)]
|
||||||
#[derive(IntoPrimitive, TryFromPrimitive)]
|
#[derive(IntoPrimitive, TryFromPrimitive)]
|
||||||
|
@ -34,91 +62,167 @@ pub enum RegionalRoute {
|
||||||
// Note: strum(serialize = ...) actually specifies extra DEserialization values.
|
// Note: strum(serialize = ...) actually specifies extra DEserialization values.
|
||||||
pub enum PlatformRoute {
|
pub enum PlatformRoute {
|
||||||
/// Brazil.
|
/// Brazil.
|
||||||
|
///
|
||||||
|
/// `16` (riotapi-schema ID/repr)
|
||||||
#[strum(to_string="BR1", serialize="BR")]
|
#[strum(to_string="BR1", serialize="BR")]
|
||||||
BR1 = 16,
|
BR1 = 16,
|
||||||
|
|
||||||
/// North-east Europe.
|
/// Europe, Northeast.
|
||||||
|
///
|
||||||
|
/// `17` (riotapi-schema ID/repr)
|
||||||
#[strum(to_string="EUN1", serialize="EUNE")]
|
#[strum(to_string="EUN1", serialize="EUNE")]
|
||||||
EUN1 = 17,
|
EUN1 = 17,
|
||||||
|
|
||||||
/// West Europe.
|
/// Europe, West.
|
||||||
|
///
|
||||||
|
/// `18` (riotapi-schema ID/repr)
|
||||||
#[strum(to_string="EUW1", serialize="EUW")]
|
#[strum(to_string="EUW1", serialize="EUW")]
|
||||||
EUW1 = 18,
|
EUW1 = 18,
|
||||||
|
|
||||||
/// Japan.
|
/// Japan.
|
||||||
|
///
|
||||||
|
/// `19` (riotapi-schema ID/repr)
|
||||||
#[strum(to_string="JP1", serialize="JP")]
|
#[strum(to_string="JP1", serialize="JP")]
|
||||||
JP1 = 19,
|
JP1 = 19,
|
||||||
|
|
||||||
/// Korea.
|
/// Korea.
|
||||||
|
///
|
||||||
|
/// `20` (riotapi-schema ID/repr)
|
||||||
KR = 20,
|
KR = 20,
|
||||||
|
|
||||||
/// North Latin America.
|
/// Latin America, North.
|
||||||
|
///
|
||||||
|
/// `21` (riotapi-schema ID/repr)
|
||||||
#[strum(to_string="LA1", serialize="LAN")]
|
#[strum(to_string="LA1", serialize="LAN")]
|
||||||
LA1 = 21,
|
LA1 = 21,
|
||||||
|
|
||||||
/// South Latin America.
|
/// Latin America, South.
|
||||||
|
///
|
||||||
|
/// `22` (riotapi-schema ID/repr)
|
||||||
#[strum(to_string="LA2", serialize="LAS")]
|
#[strum(to_string="LA2", serialize="LAS")]
|
||||||
LA2 = 22,
|
LA2 = 22,
|
||||||
|
|
||||||
/// North America.
|
/// North America.
|
||||||
|
///
|
||||||
|
/// `23` (riotapi-schema ID/repr)
|
||||||
#[strum(to_string="NA1", serialize="NA")]
|
#[strum(to_string="NA1", serialize="NA")]
|
||||||
NA1 = 23,
|
NA1 = 23,
|
||||||
|
|
||||||
/// Oceania.
|
/// Oceana.
|
||||||
|
///
|
||||||
|
/// `24` (riotapi-schema ID/repr)
|
||||||
#[strum(to_string="OC1", serialize="OCE")]
|
#[strum(to_string="OC1", serialize="OCE")]
|
||||||
OC1 = 24,
|
OC1 = 24,
|
||||||
|
|
||||||
/// Russia.
|
/// Philippines
|
||||||
|
///
|
||||||
|
/// `32` (riotapi-schema ID/repr)
|
||||||
|
PH2 = 32,
|
||||||
|
|
||||||
|
/// Russia
|
||||||
|
///
|
||||||
|
/// `25` (riotapi-schema ID/repr)
|
||||||
RU = 25,
|
RU = 25,
|
||||||
|
|
||||||
/// Turkey.
|
/// Singapore
|
||||||
|
///
|
||||||
|
/// `33` (riotapi-schema ID/repr)
|
||||||
|
SG2 = 33,
|
||||||
|
|
||||||
|
/// Thailand
|
||||||
|
///
|
||||||
|
/// `34` (riotapi-schema ID/repr)
|
||||||
|
TH2 = 34,
|
||||||
|
|
||||||
|
/// Turkey
|
||||||
|
///
|
||||||
|
/// `26` (riotapi-schema ID/repr)
|
||||||
#[strum(to_string="TR1", serialize="TR")]
|
#[strum(to_string="TR1", serialize="TR")]
|
||||||
TR1 = 26,
|
TR1 = 26,
|
||||||
|
|
||||||
|
/// Taiwan
|
||||||
|
///
|
||||||
|
/// `35` (riotapi-schema ID/repr)
|
||||||
|
TW2 = 35,
|
||||||
|
|
||||||
/// Public beta environment. Only functional in certain endpoints.
|
/// Vietnam
|
||||||
|
///
|
||||||
|
/// `36` (riotapi-schema ID/repr)
|
||||||
|
VN2 = 36,
|
||||||
|
|
||||||
|
/// Public Beta Environment, special beta testing platform. Located in North America.
|
||||||
|
///
|
||||||
|
/// `31` (riotapi-schema ID/repr)
|
||||||
#[strum(to_string="PBE1", serialize="PBE")]
|
#[strum(to_string="PBE1", serialize="PBE")]
|
||||||
PBE1 = 31,
|
PBE1 = 31,
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl PlatformRoute {
|
impl PlatformRoute {
|
||||||
/// Converts this [`PlatformRoute`] into its corresponding
|
/// Converts this [`PlatformRoute`] into its corresponding
|
||||||
/// [`RegionalRoute`]. Useful, for example, in [`match-v5` endpoints](crate::endpoints::MatchV5).
|
/// [`RegionalRoute`] for LoL and TFT match endpoints.
|
||||||
|
/// For example, [`match-v5`](crate::endpoints::MatchV5).
|
||||||
pub fn to_regional(self) -> RegionalRoute {
|
pub fn to_regional(self) -> RegionalRoute {
|
||||||
match self {
|
match self {
|
||||||
Self::BR1 => RegionalRoute::AMERICAS,
|
Self::BR1 => RegionalRoute::AMERICAS,
|
||||||
Self::LA1 => RegionalRoute::AMERICAS,
|
|
||||||
Self::LA2 => RegionalRoute::AMERICAS,
|
|
||||||
Self::NA1 => RegionalRoute::AMERICAS,
|
|
||||||
Self::OC1 => RegionalRoute::AMERICAS,
|
|
||||||
Self::PBE1 => RegionalRoute::AMERICAS,
|
|
||||||
|
|
||||||
Self::JP1 => RegionalRoute::ASIA,
|
|
||||||
Self::KR => RegionalRoute::ASIA,
|
|
||||||
|
|
||||||
Self::EUN1 => RegionalRoute::EUROPE,
|
Self::EUN1 => RegionalRoute::EUROPE,
|
||||||
Self::EUW1 => RegionalRoute::EUROPE,
|
Self::EUW1 => RegionalRoute::EUROPE,
|
||||||
Self::RU => RegionalRoute::EUROPE,
|
Self::JP1 => RegionalRoute::ASIA,
|
||||||
Self::TR1 => RegionalRoute::EUROPE,
|
Self::KR => RegionalRoute::ASIA,
|
||||||
|
Self::LA1 => RegionalRoute::AMERICAS,
|
||||||
|
Self::LA2 => RegionalRoute::AMERICAS,
|
||||||
|
Self::NA1 => RegionalRoute::AMERICAS,
|
||||||
|
Self::OC1 => RegionalRoute::SEA,
|
||||||
|
Self::PH2 => RegionalRoute::SEA,
|
||||||
|
Self::RU => RegionalRoute::EUROPE,
|
||||||
|
Self::SG2 => RegionalRoute::SEA,
|
||||||
|
Self::TH2 => RegionalRoute::SEA,
|
||||||
|
Self::TR1 => RegionalRoute::EUROPE,
|
||||||
|
Self::TW2 => RegionalRoute::SEA,
|
||||||
|
Self::VN2 => RegionalRoute::SEA,
|
||||||
|
Self::PBE1 => RegionalRoute::AMERICAS,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Used in Tournament API.
|
/// Converts this [`PlatformRoute`] into its corresponding
|
||||||
|
/// [`RegionalRoute`] for LoR endpoints.
|
||||||
|
/// For example, [`lor-match-v1`](crate::endpoints::LorMatchV1).
|
||||||
|
pub fn to_regional_lor(self) -> RegionalRoute {
|
||||||
|
match self {
|
||||||
|
Self::BR1 => RegionalRoute::AMERICAS,
|
||||||
|
Self::EUN1 => RegionalRoute::EUROPE,
|
||||||
|
Self::EUW1 => RegionalRoute::EUROPE,
|
||||||
|
Self::JP1 => RegionalRoute::ASIA,
|
||||||
|
Self::KR => RegionalRoute::ASIA,
|
||||||
|
Self::LA1 => RegionalRoute::AMERICAS,
|
||||||
|
Self::LA2 => RegionalRoute::AMERICAS,
|
||||||
|
Self::NA1 => RegionalRoute::AMERICAS,
|
||||||
|
Self::OC1 => RegionalRoute::SEA,
|
||||||
|
Self::PH2 => RegionalRoute::SEA,
|
||||||
|
Self::RU => RegionalRoute::SEA,
|
||||||
|
Self::SG2 => RegionalRoute::SEA,
|
||||||
|
Self::TH2 => RegionalRoute::SEA,
|
||||||
|
Self::TR1 => RegionalRoute::SEA,
|
||||||
|
Self::TW2 => RegionalRoute::SEA,
|
||||||
|
Self::VN2 => RegionalRoute::SEA,
|
||||||
|
Self::PBE1 => RegionalRoute::AMERICAS,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Used in LoL Tournament API.
|
||||||
pub fn as_region_str(self) -> &'static str {
|
pub fn as_region_str(self) -> &'static str {
|
||||||
match self {
|
match self {
|
||||||
Self::BR1 => "BR",
|
Self::BR1 => "BR",
|
||||||
Self::EUN1 => "EUNE",
|
Self::EUN1 => "EUNE",
|
||||||
Self::EUW1 => "EUW",
|
Self::EUW1 => "EUW",
|
||||||
Self::JP1 => "JP",
|
Self::JP1 => "JP",
|
||||||
Self::LA1 => "LAN",
|
Self::LA1 => "LAN",
|
||||||
Self::LA2 => "LAS",
|
Self::LA2 => "LAS",
|
||||||
Self::NA1 => "NA",
|
Self::NA1 => "NA",
|
||||||
Self::OC1 => "OCE",
|
Self::OC1 => "OCE",
|
||||||
|
Self::TR1 => "TR",
|
||||||
Self::PBE1 => "PBE",
|
Self::PBE1 => "PBE",
|
||||||
Self::RU => "RU",
|
other => other.into()
|
||||||
Self::TR1 => "TR",
|
|
||||||
|
|
||||||
Self::KR => "KR",
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -132,208 +236,39 @@ impl PlatformRoute {
|
||||||
#[repr(u8)]
|
#[repr(u8)]
|
||||||
#[non_exhaustive]
|
#[non_exhaustive]
|
||||||
pub enum ValPlatformRoute {
|
pub enum ValPlatformRoute {
|
||||||
/// Valorant's Asian Pacific platform.
|
/// Asia-Pacific.
|
||||||
|
///
|
||||||
|
/// `64` (riotapi-schema ID/repr)
|
||||||
AP = 64,
|
AP = 64,
|
||||||
|
|
||||||
/// Valorant's Brazil platform.
|
/// Brazil.
|
||||||
|
///
|
||||||
|
/// `65` (riotapi-schema ID/repr)
|
||||||
BR = 65,
|
BR = 65,
|
||||||
|
|
||||||
/// Valorant's Europe platform.
|
/// Europe.
|
||||||
|
///
|
||||||
|
/// `66` (riotapi-schema ID/repr)
|
||||||
EU = 66,
|
EU = 66,
|
||||||
|
|
||||||
/// Valorant's Latin America platform.
|
/// Korea.
|
||||||
LATAM = 68,
|
///
|
||||||
|
/// `70` (riotapi-schema ID/repr)
|
||||||
/// Valorant's North America platform.
|
|
||||||
NA = 69,
|
|
||||||
|
|
||||||
/// Valorant's Korea platform.
|
|
||||||
KR = 70,
|
KR = 70,
|
||||||
|
|
||||||
|
/// Latin America.
|
||||||
|
///
|
||||||
|
/// `68` (riotapi-schema ID/repr)
|
||||||
|
LATAM = 68,
|
||||||
|
|
||||||
/// Valorant's esports platform.
|
/// North America.
|
||||||
|
///
|
||||||
|
/// `69` (riotapi-schema ID/repr)
|
||||||
|
NA = 69,
|
||||||
|
|
||||||
|
/// Special esports platform.
|
||||||
|
///
|
||||||
|
/// `95` (riotapi-schema ID/repr)
|
||||||
ESPORTS = 95,
|
ESPORTS = 95,
|
||||||
}
|
|
||||||
|
|
||||||
/// Utility enum containing all routing variants.
|
|
||||||
#[derive(Debug)]
|
|
||||||
#[derive(PartialEq, Eq, Hash, PartialOrd, Ord)]
|
|
||||||
#[derive(Clone, Copy)]
|
|
||||||
#[repr(u8)]
|
|
||||||
#[non_exhaustive]
|
|
||||||
pub enum Route {
|
|
||||||
/// Sub-variant for [`RegionalRoute`]s.
|
|
||||||
Regional(RegionalRoute),
|
|
||||||
/// Sub-variant for [`PlatformRoute`]s.
|
|
||||||
Platform(PlatformRoute),
|
|
||||||
/// Sub-variant for [`ValPlatformRoute`]s.
|
|
||||||
ValPlatform(ValPlatformRoute),
|
|
||||||
}
|
|
||||||
|
|
||||||
impl From<Route> for &'static str {
|
|
||||||
fn from(route: Route) -> Self {
|
|
||||||
match route {
|
|
||||||
Route::Regional(r) => r.into(),
|
|
||||||
Route::Platform(r) => r.into(),
|
|
||||||
Route::ValPlatform(r) => r.into(),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl From<Route> for u8 {
|
|
||||||
fn from(route: Route) -> Self {
|
|
||||||
match route {
|
|
||||||
Route::Regional(r) => r.into(),
|
|
||||||
Route::Platform(r) => r.into(),
|
|
||||||
Route::ValPlatform(r) => r.into(),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl num_enum::TryFromPrimitive for Route {
|
|
||||||
type Primitive = u8;
|
|
||||||
|
|
||||||
const NAME: &'static str = stringify!(Route);
|
|
||||||
|
|
||||||
fn try_from_primitive(number: Self::Primitive) -> Result<Self, num_enum::TryFromPrimitiveError<Self>> {
|
|
||||||
RegionalRoute::try_from_primitive(number)
|
|
||||||
.map(Route::Regional)
|
|
||||||
.or_else(|_| PlatformRoute::try_from_primitive(number)
|
|
||||||
.map(Route::Platform))
|
|
||||||
.or_else(|_| ValPlatformRoute::try_from_primitive(number)
|
|
||||||
.map(Route::ValPlatform))
|
|
||||||
.map_err(|_| num_enum::TryFromPrimitiveError { number })
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl std::convert::TryFrom<u8> for Route {
|
|
||||||
type Error = num_enum::TryFromPrimitiveError<Self>;
|
|
||||||
fn try_from(number: u8) -> Result<Self, num_enum::TryFromPrimitiveError<Self>> {
|
|
||||||
Self::try_from_primitive(number)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl std::fmt::Display for Route {
|
|
||||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
|
||||||
match self {
|
|
||||||
Self::Regional(r) => r.fmt(f),
|
|
||||||
Self::Platform(r) => r.fmt(f),
|
|
||||||
Self::ValPlatform(r) => r.fmt(f),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl std::str::FromStr for Route {
|
|
||||||
type Err = strum::ParseError;
|
|
||||||
fn from_str(s: &str) -> Result<Self, Self::Err> {
|
|
||||||
RegionalRoute::from_str(s)
|
|
||||||
.map(Self::Regional)
|
|
||||||
.or_else(|_| PlatformRoute::from_str(s)
|
|
||||||
.map(Self::Platform))
|
|
||||||
.or_else(|_| ValPlatformRoute::from_str(s)
|
|
||||||
.map(Self::ValPlatform))
|
|
||||||
.map_err(|_| strum::ParseError::VariantNotFound)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Route {
|
|
||||||
/// Returns an iterator over all routes. Starts with [`Self::Regional`],
|
|
||||||
/// then [`Self::Platform`], and finally [`Self::ValPlatform`].
|
|
||||||
pub fn iter() -> impl Iterator<Item = Self> {
|
|
||||||
use strum::IntoEnumIterator;
|
|
||||||
|
|
||||||
let regional = RegionalRoute::iter()
|
|
||||||
.map(Self::Regional);
|
|
||||||
let platform = PlatformRoute::iter()
|
|
||||||
.map(Self::Platform);
|
|
||||||
let val_platform = ValPlatformRoute::iter()
|
|
||||||
.map(Self::ValPlatform);
|
|
||||||
|
|
||||||
regional
|
|
||||||
.chain(platform)
|
|
||||||
.chain(val_platform)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg(test)]
|
|
||||||
mod tests {
|
|
||||||
use super::*;
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn test_route_tostring() {
|
|
||||||
assert_eq!("AMERICAS", Into::<&'static str>::into(Route::Regional(RegionalRoute::AMERICAS)));
|
|
||||||
assert_eq!("KR", Into::<&'static str>::into(Route::Platform(PlatformRoute::KR)));
|
|
||||||
assert_eq!("KR", Into::<&'static str>::into(Route::ValPlatform(ValPlatformRoute::KR)));
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn test_route_iter() {
|
|
||||||
for (i, route) in Route::iter().enumerate() {
|
|
||||||
println!("{:>2} {:<10} {:>3}", i, route, u8::from(route));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn test_route_tryfrom() {
|
|
||||||
for x in u8::MIN..=u8::MAX {
|
|
||||||
if let Ok(route) = std::convert::TryInto::<Route>::try_into(x) {
|
|
||||||
println!("{:>3} {:<8}", x, route);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn test_regional_tostring() {
|
|
||||||
assert_eq!("AMERICAS", RegionalRoute::AMERICAS.to_string());
|
|
||||||
assert_eq!("SEA", RegionalRoute::SEA.to_string());
|
|
||||||
|
|
||||||
assert_eq!("AMERICAS", Into::<&'static str>::into(RegionalRoute::AMERICAS));
|
|
||||||
assert_eq!("SEA", Into::<&'static str>::into(RegionalRoute::SEA));
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn test_regional_parse() {
|
|
||||||
assert_eq!(Ok(RegionalRoute::AMERICAS), "AMERICAS".parse());
|
|
||||||
assert_eq!(Ok(RegionalRoute::SEA), "SEA".parse());
|
|
||||||
assert!("NA".parse::<RegionalRoute>().is_err());
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn test_platform_tostring() {
|
|
||||||
assert_eq!("BR1", PlatformRoute::BR1.to_string());
|
|
||||||
assert_eq!("KR", PlatformRoute::KR.to_string());
|
|
||||||
|
|
||||||
assert_eq!("BR1", Into::<&'static str>::into(PlatformRoute::BR1));
|
|
||||||
assert_eq!("KR", Into::<&'static str>::into(PlatformRoute::KR));
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn test_platform_parse() {
|
|
||||||
assert_eq!(Ok(PlatformRoute::BR1), "BR1".parse());
|
|
||||||
assert_eq!(Ok(PlatformRoute::KR), "KR".parse());
|
|
||||||
assert_eq!(Ok(PlatformRoute::JP1), "JP1".parse());
|
|
||||||
assert_eq!(Ok(PlatformRoute::JP1), "JP".parse());
|
|
||||||
assert_eq!(Ok(PlatformRoute::NA1), "NA1".parse());
|
|
||||||
assert_eq!(Ok(PlatformRoute::NA1), "NA".parse());
|
|
||||||
assert!("LA".parse::<PlatformRoute>().is_err());
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn test_valplatform_tostring() {
|
|
||||||
assert_eq!("AP", ValPlatformRoute::AP.to_string());
|
|
||||||
assert_eq!("KR", ValPlatformRoute::KR.to_string());
|
|
||||||
assert_eq!("ESPORTS", ValPlatformRoute::ESPORTS.to_string());
|
|
||||||
|
|
||||||
assert_eq!("AP", Into::<&'static str>::into(ValPlatformRoute::AP));
|
|
||||||
assert_eq!("KR", Into::<&'static str>::into(ValPlatformRoute::KR));
|
|
||||||
assert_eq!("ESPORTS", Into::<&'static str>::into(ValPlatformRoute::ESPORTS));
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn test_valplatform_parse() {
|
|
||||||
assert_eq!(Ok(ValPlatformRoute::AP), "AP".parse());
|
|
||||||
assert_eq!(Ok(ValPlatformRoute::KR), "KR".parse());
|
|
||||||
assert_eq!(Ok(ValPlatformRoute::ESPORTS), "ESPORTS".parse());
|
|
||||||
assert!("SEA".parse::<ValPlatformRoute>().is_err());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
184
riven/src/consts/route_ext.rs
Normal file
184
riven/src/consts/route_ext.rs
Normal file
|
@ -0,0 +1,184 @@
|
||||||
|
use super::{ RegionalRoute, PlatformRoute, ValPlatformRoute };
|
||||||
|
|
||||||
|
/// Utility enum containing all routing variants.
|
||||||
|
#[derive(Debug)]
|
||||||
|
#[derive(PartialEq, Eq, Hash, PartialOrd, Ord)]
|
||||||
|
#[derive(Clone, Copy)]
|
||||||
|
#[repr(u8)]
|
||||||
|
#[non_exhaustive]
|
||||||
|
pub enum Route {
|
||||||
|
/// Sub-variant for [`RegionalRoute`]s.
|
||||||
|
Regional(RegionalRoute),
|
||||||
|
/// Sub-variant for [`PlatformRoute`]s.
|
||||||
|
Platform(PlatformRoute),
|
||||||
|
/// Sub-variant for [`ValPlatformRoute`]s.
|
||||||
|
ValPlatform(ValPlatformRoute),
|
||||||
|
}
|
||||||
|
|
||||||
|
impl From<Route> for &'static str {
|
||||||
|
fn from(route: Route) -> Self {
|
||||||
|
match route {
|
||||||
|
Route::Regional(r) => r.into(),
|
||||||
|
Route::Platform(r) => r.into(),
|
||||||
|
Route::ValPlatform(r) => r.into(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl From<Route> for u8 {
|
||||||
|
fn from(route: Route) -> Self {
|
||||||
|
match route {
|
||||||
|
Route::Regional(r) => r.into(),
|
||||||
|
Route::Platform(r) => r.into(),
|
||||||
|
Route::ValPlatform(r) => r.into(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl num_enum::TryFromPrimitive for Route {
|
||||||
|
type Primitive = u8;
|
||||||
|
|
||||||
|
const NAME: &'static str = stringify!(Route);
|
||||||
|
|
||||||
|
fn try_from_primitive(number: Self::Primitive) -> Result<Self, num_enum::TryFromPrimitiveError<Self>> {
|
||||||
|
RegionalRoute::try_from_primitive(number)
|
||||||
|
.map(Route::Regional)
|
||||||
|
.or_else(|_| PlatformRoute::try_from_primitive(number)
|
||||||
|
.map(Route::Platform))
|
||||||
|
.or_else(|_| ValPlatformRoute::try_from_primitive(number)
|
||||||
|
.map(Route::ValPlatform))
|
||||||
|
.map_err(|_| num_enum::TryFromPrimitiveError { number })
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl std::convert::TryFrom<u8> for Route {
|
||||||
|
type Error = num_enum::TryFromPrimitiveError<Self>;
|
||||||
|
fn try_from(number: u8) -> Result<Self, num_enum::TryFromPrimitiveError<Self>> {
|
||||||
|
<Self as num_enum::TryFromPrimitive>::try_from_primitive(number)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl std::fmt::Display for Route {
|
||||||
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||||
|
match self {
|
||||||
|
Self::Regional(r) => r.fmt(f),
|
||||||
|
Self::Platform(r) => r.fmt(f),
|
||||||
|
Self::ValPlatform(r) => r.fmt(f),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl std::str::FromStr for Route {
|
||||||
|
type Err = strum::ParseError;
|
||||||
|
fn from_str(s: &str) -> Result<Self, Self::Err> {
|
||||||
|
RegionalRoute::from_str(s)
|
||||||
|
.map(Self::Regional)
|
||||||
|
.or_else(|_| PlatformRoute::from_str(s)
|
||||||
|
.map(Self::Platform))
|
||||||
|
.or_else(|_| ValPlatformRoute::from_str(s)
|
||||||
|
.map(Self::ValPlatform))
|
||||||
|
.map_err(|_| strum::ParseError::VariantNotFound)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Route {
|
||||||
|
/// Returns an iterator over all routes. Starts with [`Self::Regional`],
|
||||||
|
/// then [`Self::Platform`], and finally [`Self::ValPlatform`].
|
||||||
|
pub fn iter() -> impl Iterator<Item = Self> {
|
||||||
|
use strum::IntoEnumIterator;
|
||||||
|
|
||||||
|
let regional = RegionalRoute::iter()
|
||||||
|
.map(Self::Regional);
|
||||||
|
let platform = PlatformRoute::iter()
|
||||||
|
.map(Self::Platform);
|
||||||
|
let val_platform = ValPlatformRoute::iter()
|
||||||
|
.map(Self::ValPlatform);
|
||||||
|
|
||||||
|
regional
|
||||||
|
.chain(platform)
|
||||||
|
.chain(val_platform)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use super::*;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_route_tostring() {
|
||||||
|
assert_eq!("AMERICAS", Into::<&'static str>::into(Route::Regional(RegionalRoute::AMERICAS)));
|
||||||
|
assert_eq!("KR", Into::<&'static str>::into(Route::Platform(PlatformRoute::KR)));
|
||||||
|
assert_eq!("KR", Into::<&'static str>::into(Route::ValPlatform(ValPlatformRoute::KR)));
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_route_iter() {
|
||||||
|
for (i, route) in Route::iter().enumerate() {
|
||||||
|
println!("{:>2} {:<10} {:>3}", i, route, u8::from(route));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_route_tryfrom() {
|
||||||
|
for x in u8::MIN..=u8::MAX {
|
||||||
|
if let Ok(route) = std::convert::TryInto::<Route>::try_into(x) {
|
||||||
|
println!("{:>3} {:<8}", x, route);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_regional_tostring() {
|
||||||
|
assert_eq!("AMERICAS", RegionalRoute::AMERICAS.to_string());
|
||||||
|
assert_eq!("SEA", RegionalRoute::SEA.to_string());
|
||||||
|
|
||||||
|
assert_eq!("AMERICAS", Into::<&'static str>::into(RegionalRoute::AMERICAS));
|
||||||
|
assert_eq!("SEA", Into::<&'static str>::into(RegionalRoute::SEA));
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_regional_parse() {
|
||||||
|
assert_eq!(Ok(RegionalRoute::AMERICAS), "AMERICAS".parse());
|
||||||
|
assert_eq!(Ok(RegionalRoute::SEA), "SEA".parse());
|
||||||
|
assert!("NA".parse::<RegionalRoute>().is_err());
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_platform_tostring() {
|
||||||
|
assert_eq!("BR1", PlatformRoute::BR1.to_string());
|
||||||
|
assert_eq!("KR", PlatformRoute::KR.to_string());
|
||||||
|
|
||||||
|
assert_eq!("BR1", Into::<&'static str>::into(PlatformRoute::BR1));
|
||||||
|
assert_eq!("KR", Into::<&'static str>::into(PlatformRoute::KR));
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_platform_parse() {
|
||||||
|
assert_eq!(Ok(PlatformRoute::BR1), "BR1".parse());
|
||||||
|
assert_eq!(Ok(PlatformRoute::KR), "KR".parse());
|
||||||
|
assert_eq!(Ok(PlatformRoute::JP1), "JP1".parse());
|
||||||
|
assert_eq!(Ok(PlatformRoute::JP1), "JP".parse());
|
||||||
|
assert_eq!(Ok(PlatformRoute::NA1), "NA1".parse());
|
||||||
|
assert_eq!(Ok(PlatformRoute::NA1), "NA".parse());
|
||||||
|
assert!("LA".parse::<PlatformRoute>().is_err());
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_valplatform_tostring() {
|
||||||
|
assert_eq!("AP", ValPlatformRoute::AP.to_string());
|
||||||
|
assert_eq!("KR", ValPlatformRoute::KR.to_string());
|
||||||
|
assert_eq!("ESPORTS", ValPlatformRoute::ESPORTS.to_string());
|
||||||
|
|
||||||
|
assert_eq!("AP", Into::<&'static str>::into(ValPlatformRoute::AP));
|
||||||
|
assert_eq!("KR", Into::<&'static str>::into(ValPlatformRoute::KR));
|
||||||
|
assert_eq!("ESPORTS", Into::<&'static str>::into(ValPlatformRoute::ESPORTS));
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_valplatform_parse() {
|
||||||
|
assert_eq!(Ok(ValPlatformRoute::AP), "AP".parse());
|
||||||
|
assert_eq!(Ok(ValPlatformRoute::KR), "KR".parse());
|
||||||
|
assert_eq!(Ok(ValPlatformRoute::ESPORTS), "ESPORTS".parse());
|
||||||
|
assert!("SEA".parse::<ValPlatformRoute>().is_err());
|
||||||
|
}
|
||||||
|
}
|
142
riven/srcgen/consts/route.rs.dt
Normal file
142
riven/srcgen/consts/route.rs.dt
Normal file
|
@ -0,0 +1,142 @@
|
||||||
|
{{
|
||||||
|
const dotUtils = require('./dotUtils.js');
|
||||||
|
const routesTable = require('./.routesTable.json');
|
||||||
|
}}{{= dotUtils.preamble() }}
|
||||||
|
|
||||||
|
use num_enum::{ IntoPrimitive, TryFromPrimitive };
|
||||||
|
use strum_macros::{ EnumString, EnumIter, Display, IntoStaticStr };
|
||||||
|
|
||||||
|
/// Regional routes, used in tournament services, Legends of Runterra, and other endpoints.
|
||||||
|
#[derive(Debug)]
|
||||||
|
#[derive(PartialEq, Eq, Hash, PartialOrd, Ord)]
|
||||||
|
#[derive(IntoPrimitive, TryFromPrimitive)]
|
||||||
|
#[derive(EnumString, EnumIter, Display, IntoStaticStr)]
|
||||||
|
#[derive(Clone, Copy)]
|
||||||
|
#[repr(u8)]
|
||||||
|
#[non_exhaustive]
|
||||||
|
pub enum RegionalRoute {
|
||||||
|
{{
|
||||||
|
for (const [ name, { id, description, deprecated } ] of Object.entries(routesTable['regional'])) {
|
||||||
|
const desc = description.split('\n');
|
||||||
|
}}
|
||||||
|
{{~ desc :line }}
|
||||||
|
/// {{= line }}
|
||||||
|
{{~}}
|
||||||
|
///
|
||||||
|
/// `{{= id }}` (riotapi-schema ID/repr)
|
||||||
|
{{? deprecated }}
|
||||||
|
#[deprecated]
|
||||||
|
{{?}}
|
||||||
|
{{= name.toUpperCase() }} = {{= id }},
|
||||||
|
|
||||||
|
{{
|
||||||
|
}
|
||||||
|
}}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Platform routes for League of Legends (LoL), Teamfight Tactics (TFT), and Legends of Runeterra (LoR).
|
||||||
|
#[derive(Debug)]
|
||||||
|
#[derive(PartialEq, Eq, Hash, PartialOrd, Ord)]
|
||||||
|
#[derive(IntoPrimitive, TryFromPrimitive)]
|
||||||
|
#[derive(EnumString, EnumIter, Display, IntoStaticStr)]
|
||||||
|
#[derive(Clone, Copy)]
|
||||||
|
#[repr(u8)]
|
||||||
|
#[non_exhaustive]
|
||||||
|
// Note: strum(serialize = ...) actually specifies extra DEserialization values.
|
||||||
|
pub enum PlatformRoute {
|
||||||
|
{{
|
||||||
|
for (const [ name, { id, description, altName, deprecated } ] of Object.entries(routesTable['platform'])) {
|
||||||
|
const desc = description.split('\n');
|
||||||
|
}}
|
||||||
|
{{~ desc :line }}
|
||||||
|
/// {{= line }}
|
||||||
|
{{~}}
|
||||||
|
///
|
||||||
|
/// `{{= id }}` (riotapi-schema ID/repr)
|
||||||
|
{{? deprecated }}
|
||||||
|
#[deprecated]
|
||||||
|
{{?}}
|
||||||
|
{{? altName }}
|
||||||
|
#[strum(to_string="{{= name.toUpperCase() }}", serialize="{{= altName }}")]
|
||||||
|
{{?}}
|
||||||
|
{{= name.toUpperCase() }} = {{= id }},
|
||||||
|
|
||||||
|
{{
|
||||||
|
}
|
||||||
|
}}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl PlatformRoute {
|
||||||
|
/// Converts this [`PlatformRoute`] into its corresponding
|
||||||
|
/// [`RegionalRoute`] for LoL and TFT match endpoints.
|
||||||
|
/// For example, [`match-v5`](crate::endpoints::MatchV5).
|
||||||
|
pub fn to_regional(self) -> RegionalRoute {
|
||||||
|
match self {
|
||||||
|
{{
|
||||||
|
for (const [ name, { regionalRoute } ] of Object.entries(routesTable['platform'])) {
|
||||||
|
}}
|
||||||
|
Self::{{= name.toUpperCase() }} => RegionalRoute::{{= regionalRoute.toUpperCase() }},
|
||||||
|
{{
|
||||||
|
}
|
||||||
|
}}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Converts this [`PlatformRoute`] into its corresponding
|
||||||
|
/// [`RegionalRoute`] for LoR endpoints.
|
||||||
|
/// For example, [`lor-match-v1`](crate::endpoints::LorMatchV1).
|
||||||
|
pub fn to_regional_lor(self) -> RegionalRoute {
|
||||||
|
match self {
|
||||||
|
{{
|
||||||
|
for (const [ name, { regionalRouteLor } ] of Object.entries(routesTable['platform'])) {
|
||||||
|
}}
|
||||||
|
Self::{{= name.toUpperCase() }} => RegionalRoute::{{= regionalRouteLor.toUpperCase() }},
|
||||||
|
{{
|
||||||
|
}
|
||||||
|
}}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Used in LoL Tournament API.
|
||||||
|
pub fn as_region_str(self) -> &'static str {
|
||||||
|
match self {
|
||||||
|
{{
|
||||||
|
for (const [ name, { altName } ] of Object.entries(routesTable['platform'])) {
|
||||||
|
if (!altName) continue;
|
||||||
|
}}
|
||||||
|
Self::{{= name.toUpperCase() }} => "{{= altName }}",
|
||||||
|
{{
|
||||||
|
}
|
||||||
|
}}
|
||||||
|
other => other.into()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Platform routes for Valorant.
|
||||||
|
#[derive(Debug)]
|
||||||
|
#[derive(PartialEq, Eq, Hash, PartialOrd, Ord)]
|
||||||
|
#[derive(IntoPrimitive, TryFromPrimitive)]
|
||||||
|
#[derive(EnumString, EnumIter, Display, IntoStaticStr)]
|
||||||
|
#[derive(Clone, Copy)]
|
||||||
|
#[repr(u8)]
|
||||||
|
#[non_exhaustive]
|
||||||
|
pub enum ValPlatformRoute {
|
||||||
|
{{
|
||||||
|
for (const [ name, { id, description, deprecated } ] of Object.entries(routesTable['val-platform'])) {
|
||||||
|
const desc = description.split('\n');
|
||||||
|
}}
|
||||||
|
{{~ desc :line }}
|
||||||
|
/// {{= line }}
|
||||||
|
{{~}}
|
||||||
|
///
|
||||||
|
/// `{{= id }}` (riotapi-schema ID/repr)
|
||||||
|
{{? deprecated }}
|
||||||
|
#[deprecated]
|
||||||
|
{{?}}
|
||||||
|
{{= name.toUpperCase() }} = {{= id }},
|
||||||
|
|
||||||
|
{{
|
||||||
|
}
|
||||||
|
}}
|
||||||
|
}
|
|
@ -39,6 +39,10 @@ const files = [
|
||||||
'http://www.mingweisamuel.com/riotapi-schema/enums/maps.json',
|
'http://www.mingweisamuel.com/riotapi-schema/enums/maps.json',
|
||||||
'.maps.json'
|
'.maps.json'
|
||||||
],
|
],
|
||||||
|
[
|
||||||
|
'https://raw.githubusercontent.com/MingweiSamuel/riotapi-schema/master/src/data/routesTable.json',
|
||||||
|
'.routesTable.json'
|
||||||
|
],
|
||||||
];
|
];
|
||||||
|
|
||||||
const downloadFilesPromise = Promise.all(files.map(([url, file]) => req(url)
|
const downloadFilesPromise = Promise.all(files.map(([url, file]) => req(url)
|
||||||
|
|
Loading…
Reference in a new issue