removing lifetime parameter from RiotApi

pull/5/head
Mingwei Samuel 2019-10-21 21:45:38 -07:00
parent 02e9c2786a
commit 22103fea05
11 changed files with 271 additions and 234 deletions

View File

@ -1,7 +1,7 @@
 
// This file is automatically generated. // This file is automatically generated.
// Do not directly edit. // Do not directly edit.
// Generated on 2019-10-21T02:25:22.691Z // Generated on 2019-10-22T04:47:08.742Z
use std::fmt; use std::fmt;
use num_derive; use num_derive;

View File

@ -1,7 +1,7 @@
// This file is automatically generated. // This file is automatically generated.
// Do not directly edit. // Do not directly edit.
// Generated on 2019-10-21T02:25:22.768Z // Generated on 2019-10-22T04:47:08.827Z
// http://www.mingweisamuel.com/riotapi-schema/tool/ // http://www.mingweisamuel.com/riotapi-schema/tool/
// Version 0c74167e0eaaeb6de1c7e8219fecaabcf8386d1f // Version 0c74167e0eaaeb6de1c7e8219fecaabcf8386d1f

View File

@ -1,9 +1,6 @@
mod dto; mod dto;
pub use dto::*; pub use dto::*;
mod endpoints;
pub use endpoints::*;
pub mod consts; pub mod consts;
mod riot_api_config; mod riot_api_config;
@ -41,11 +38,10 @@ mod tests {
let champ = crate::consts::Champion::Riven; let champ = crate::consts::Champion::Riven;
println!("{}", champ); println!("{}", champ);
let api_key_raw = std::fs::read_to_string("apikey.txt").unwrap(); // TODO don't use unwrap. let api_key = std::fs::read_to_string("apikey.txt").unwrap(); // TODO don't use unwrap.
let api_key = api_key_raw.trim();
let rt = Runtime::new().unwrap(); let rt = Runtime::new().unwrap();
let riot_api = RiotApi::with_key(api_key); let riot_api = RiotApi::with_key(api_key.trim());
for i in 0..2 { for i in 0..2 {
let my_future = riot_api.champion_mastery_v4_get_all_champion_masteries( let my_future = riot_api.champion_mastery_v4_get_all_champion_masteries(

View File

@ -2,10 +2,10 @@ mod rate_limit;
mod rate_limit_type; mod rate_limit_type;
mod token_bucket; mod token_bucket;
mod regional_requester; mod regional_requester;
mod requester_manager; // mod requester_manager;
pub use rate_limit::*; pub use rate_limit::*;
pub use rate_limit_type::*; pub use rate_limit_type::*;
pub use token_bucket::*; pub use token_bucket::*;
pub use regional_requester::*; pub use regional_requester::*;
pub use requester_manager::*; // pub use requester_manager::*;

View File

@ -1,3 +1,4 @@
use std::future::Future;
use std::sync::Arc; use std::sync::Arc;
use reqwest::{ Client, StatusCode, Url }; use reqwest::{ Client, StatusCode, Url };
@ -10,19 +11,17 @@ use crate::util::InsertOnlyCHashMap;
use super::RateLimit; use super::RateLimit;
use super::RateLimitType; use super::RateLimitType;
pub struct RegionalRequester<'a> { pub struct RegionalRequester {
/// Configuration settings.
riot_api_config: &'a RiotApiConfig<'a>,
/// Client for making requests.
client: &'a Client,
/// Represents the app rate limit. /// Represents the app rate limit.
app_rate_limit: RateLimit, app_rate_limit: RateLimit,
/// Represents method rate limits. /// Represents method rate limits.
method_rate_limits: InsertOnlyCHashMap<&'a str, RateLimit>, method_rate_limits: InsertOnlyCHashMap<&'static str, RateLimit>,
} }
impl<'a> RegionalRequester<'a> { impl RegionalRequester {
/// Request header name for the Riot API key. /// Request header name for the Riot API key.
const RIOT_KEY_HEADER: &'static str = "X-Riot-Token"; const RIOT_KEY_HEADER: &'static str = "X-Riot-Token";
@ -30,79 +29,85 @@ impl<'a> RegionalRequester<'a> {
const NONE_STATUS_CODES: [u16; 3] = [ 204, 404, 422 ]; const NONE_STATUS_CODES: [u16; 3] = [ 204, 404, 422 ];
pub fn new(riot_api_config: &'a RiotApiConfig<'a>, client: &'a Client) -> Self { pub fn new() -> Self {
Self { Self {
riot_api_config: riot_api_config,
client: client,
app_rate_limit: RateLimit::new(RateLimitType::Application), app_rate_limit: RateLimit::new(RateLimitType::Application),
method_rate_limits: InsertOnlyCHashMap::new(), method_rate_limits: InsertOnlyCHashMap::new(),
} }
} }
pub async fn get<T: serde::de::DeserializeOwned>( pub fn get<'a, T: serde::de::DeserializeOwned>(self: Arc<Self>,
&self, method_id: &'a str, region: Region, path: &str, config: &'a RiotApiConfig, client: &'a Client,
query: Option<&str>) -> Result<Option<T>, reqwest::Error> method_id: &'static str, region: Region, path: String,
query: Option<String>)
-> impl Future<Output = Result<Option<T>, reqwest::Error>> + 'a
{ {
async move {
let query = query.as_ref().map(|s| s.as_ref());
let mut attempts: u8 = 0; // let ref config = RiotApiConfig::with_key("asdf");
for _ in 0..=self.riot_api_config.retries { // let ref client = Client::new();
attempts += 1;
let method_rate_limit: Arc<RateLimit> = self.method_rate_limits let mut attempts: u8 = 0;
.get_or_insert_with(method_id, || RateLimit::new(RateLimitType::Method)); for _ in 0..=config.retries {
attempts += 1;
// Rate limiting. let method_rate_limit: Arc<RateLimit> = self.method_rate_limits
while let Some(delay) = RateLimit::get_both_or_delay(&self.app_rate_limit, &*method_rate_limit) { .get_or_insert_with(method_id, || RateLimit::new(RateLimitType::Method));
delay_for(delay).await;
}
// Send request. // Rate limiting.
let url_base = format!("https://{}.api.riotgames.com", region.platform); while let Some(delay) = RateLimit::get_both_or_delay(&self.app_rate_limit, &*method_rate_limit) {
let mut url = Url::parse(&*url_base) delay_for(delay).await;
.unwrap_or_else(|_| panic!("Failed to parse url_base: \"{}\".", url_base));
url.set_path(path);
url.set_query(query);
let result = self.client.get(url)
.header(Self::RIOT_KEY_HEADER, self.riot_api_config.api_key)
.send()
.await;
let response = match result {
Err(e) => return Err(e),
Ok(r) => r,
};
// Maybe update rate limits (based on response headers).
self.app_rate_limit.on_response(&response);
method_rate_limit.on_response(&response);
// Handle response.
let status = response.status();
// Success, return None.
if Self::is_none_status_code(&status) {
return Ok(None);
}
// Success, return a value.
if status.is_success() {
let value = response.json::<T>().await;
return match value {
Err(e) => Err(e),
Ok(v) => Ok(Some(v)),
} }
// Send request.
let url_base = format!("https://{}.api.riotgames.com", region.platform);
let mut url = Url::parse(&*url_base)
.unwrap_or_else(|_| panic!("Failed to parse url_base: \"{}\".", url_base));
url.set_path(&*path);
url.set_query(query);
let result = client.get(url)
.header(Self::RIOT_KEY_HEADER, &*config.api_key)
.send()
.await;
let response = match result {
Err(e) => return Err(e),
Ok(r) => r,
};
// Maybe update rate limits (based on response headers).
self.app_rate_limit.on_response(&response);
method_rate_limit.on_response(&response);
// Handle response.
let status = response.status();
// Success, return None.
if Self::is_none_status_code(&status) {
return Ok(None);
}
// Success, return a value.
if status.is_success() {
let value = response.json::<T>().await;
return match value {
Err(e) => Err(e),
Ok(v) => Ok(Some(v)),
}
}
// Retryable.
if StatusCode::TOO_MANY_REQUESTS == status || status.is_server_error() {
continue;
}
// Failure (non-retryable).
if status.is_client_error() {
break;
}
panic!("NOT HANDLED: {}!", status);
} }
// Retryable. // TODO: return error.
if StatusCode::TOO_MANY_REQUESTS == status || status.is_server_error() { panic!("FAILED AFTER {} ATTEMPTS!", attempts);
continue;
}
// Failure (non-retryable).
if status.is_client_error() {
break;
}
panic!("NOT HANDLED: {}!", status);
} }
// TODO: return error.
panic!("FAILED AFTER {} ATTEMPTS!", attempts);
} }
fn is_none_status_code(status: &StatusCode) -> bool { fn is_none_status_code(status: &StatusCode) -> bool {

View File

@ -1,3 +1,5 @@
use std::future::Future;
use log::*; use log::*;
use reqwest::Client; use reqwest::Client;
@ -7,18 +9,18 @@ use crate::util::InsertOnlyCHashMap;
use super::RegionalRequester; use super::RegionalRequester;
pub struct RequesterManager<'a> { pub struct RequesterManager {
/// Configuration settings. /// Configuration settings.
pub riot_api_config: RiotApiConfig<'a>, riot_api_config: RiotApiConfig,
/// Client for making requests. /// Client for making requests.
client: Client, client: Client,
/// Per-region requesters. /// Per-region requesters.
regional_requesters: InsertOnlyCHashMap<Region, RegionalRequester<'a>>, regional_requesters: InsertOnlyCHashMap<Region, RegionalRequester>,
} }
impl<'a> RequesterManager<'a> { impl RequesterManager {
pub fn new(riot_api_config: RiotApiConfig<'a>) -> Self { pub fn new(riot_api_config: RiotApiConfig) -> Self {
// TODO configure client. // TODO configure client.
let client = Client::new(); let client = Client::new();
trace!("Creating client (TODO: configuration)."); trace!("Creating client (TODO: configuration).");
@ -30,13 +32,19 @@ impl<'a> RequesterManager<'a> {
} }
} }
pub async fn get<T: serde::de::DeserializeOwned>( pub fn get_regional_requester(&self, region: Region) {
&'a self, method_id: &'a str, region: Region, path: &str, self.regional_requesters
query: Option<&str>) -> Result<Option<T>, reqwest::Error> .get_or_insert_with(region, || RegionalRequester::new())
{
// TODO: max concurrent requests? Or can configure client?
let regional_requester = self.regional_requesters
.get_or_insert_with(region, || RegionalRequester::new(&self.riot_api_config, &self.client));
regional_requester.get(method_id, region, path, query).await
} }
// pub fn get<T>(
// &self, method_id: &'static str, region: Region, path: &str,
// query: Option<&str>) -> dyn Future<Result<Option<T>, reqwest::Error>>
// {
// // TODO: max concurrent requests? Or can configure client?
// let regional_requester = self.regional_requesters
// .get_or_insert_with(region, || RegionalRequester::new());
// regional_requester
// .get(&self.riot_api_config, &self.client, method_id, region, path, query)
// }
} }

View File

@ -1,21 +1,47 @@
use crate::RiotApiConfig; mod endpoints;
use crate::req::RequesterManager; pub use endpoints::*;
pub struct RiotApi<'a> { use std::future::Future;
pub requester_manager: RequesterManager<'a>,
_private: (), use log::*;
use reqwest::Client;
use crate::RiotApiConfig;
use crate::consts::Region;
use crate::req::RegionalRequester;
use crate::util::InsertOnlyCHashMap;
pub struct RiotApi {
/// Configuration settings.
config: RiotApiConfig,
/// Client for making requests.
client: Client,
/// Per-region requesters.
regional_requesters: InsertOnlyCHashMap<Region, RegionalRequester>,
} }
impl<'a> RiotApi<'a> { impl RiotApi {
pub fn with_config(config: RiotApiConfig<'a>) -> Self { pub fn with_config(config: RiotApiConfig) -> Self {
let req_man = RequesterManager::new(config); trace!("Creating client (TODO: configuration).");
Self { Self {
requester_manager: req_man, config: config,
_private: (), client: Client::new(),
regional_requesters: InsertOnlyCHashMap::new(),
} }
} }
pub fn with_key(api_key: &'a str) -> Self { pub fn with_key<T: Into<String>>(api_key: T) -> Self {
Self::with_config(RiotApiConfig::with_key(api_key)) Self::with_config(RiotApiConfig::with_key(api_key))
} }
pub fn get<'a, T: serde::de::DeserializeOwned + 'a>(&'a self,
method_id: &'static str, region: Region, path: String, query: Option<String>)
-> impl Future<Output = Result<Option<T>, reqwest::Error>> + 'a
{
// TODO: max concurrent requests? Or can configure client?
self.regional_requesters
.get_or_insert_with(region, || RegionalRequester::new())
.get(&self.config, &self.client, method_id, region, path, query)
}
} }

View File

@ -1,11 +1,12 @@
// This file is automatically generated. // This file is automatically generated.
// Do not directly edit. // Do not directly edit.
// Generated on 2019-10-21T02:25:22.772Z // Generated on 2019-10-22T04:47:08.813Z
// http://www.mingweisamuel.com/riotapi-schema/tool/ // http://www.mingweisamuel.com/riotapi-schema/tool/
// Version 0c74167e0eaaeb6de1c7e8219fecaabcf8386d1f // Version 0c74167e0eaaeb6de1c7e8219fecaabcf8386d1f
use std::future::Future;
use std::vec::Vec; use std::vec::Vec;
use reqwest; use reqwest;
@ -16,18 +17,18 @@ use crate::riot_api::RiotApi;
// ChampionMasteryV4 // ChampionMasteryV4
impl<'a> RiotApi<'a> { impl RiotApi {
/// Get all champion mastery entries sorted by number of champion points descending, /// Get all champion mastery entries sorted by number of champion points descending,
/// # Official API Reference /// # Official API Reference
/// <a href="https://developer.riotgames.com/api-methods/#champion-mastery-v4/GET_getAllChampionMasteries">https://developer.riotgames.com/api-methods/#champion-mastery-v4/GET_getAllChampionMasteries</a> /// <a href="https://developer.riotgames.com/api-methods/#champion-mastery-v4/GET_getAllChampionMasteries">https://developer.riotgames.com/api-methods/#champion-mastery-v4/GET_getAllChampionMasteries</a>
/// # Parameters /// # Parameters
/// * `region` - Region to query. /// * `region` - Region to query.
/// * `encryptedSummonerId` - Summoner ID associated with the player /// * `encryptedSummonerId` - Summoner ID associated with the player
pub async fn champion_mastery_v4_get_all_champion_masteries(&'a self, region: Region, encrypted_summoner_id: &str) -> Result<Option<Vec<crate::champion_mastery_v4::ChampionMastery>>, reqwest::Error> { pub fn champion_mastery_v4_get_all_champion_masteries<'a>(&'a self, region: Region, encrypted_summoner_id: &str)
-> impl Future<Output = Result<Option<Vec<crate::champion_mastery_v4::ChampionMastery>>, reqwest::Error>> + 'a
{
let path_string = format!("/lol/champion-mastery/v4/champion-masteries/by-summoner/{}", encrypted_summoner_id); let path_string = format!("/lol/champion-mastery/v4/champion-masteries/by-summoner/{}", encrypted_summoner_id);
return self.requester_manager.get::<Vec<crate::champion_mastery_v4::ChampionMastery>>( self.get::<Vec<crate::champion_mastery_v4::ChampionMastery>>("champion-mastery-v4.getAllChampionMasteries", region, path_string, None)
"champion-mastery-v4.getAllChampionMasteries", region, &*path_string,
None).await; // false);
} }
/// Get a champion mastery by player ID and champion ID. /// Get a champion mastery by player ID and champion ID.
@ -37,11 +38,11 @@ impl<'a> RiotApi<'a> {
/// * `region` - Region to query. /// * `region` - Region to query.
/// * `championId` - Champion ID to retrieve Champion Mastery for /// * `championId` - Champion ID to retrieve Champion Mastery for
/// * `encryptedSummonerId` - Summoner ID associated with the player /// * `encryptedSummonerId` - Summoner ID associated with the player
pub async fn champion_mastery_v4_get_champion_mastery(&'a self, region: Region, encrypted_summoner_id: &str, champion_id: i64) -> Result<Option<crate::champion_mastery_v4::ChampionMastery>, reqwest::Error> { pub fn champion_mastery_v4_get_champion_mastery<'a>(&'a self, region: Region, encrypted_summoner_id: &str, champion_id: i64)
-> impl Future<Output = Result<Option<crate::champion_mastery_v4::ChampionMastery>, reqwest::Error>> + 'a
{
let path_string = format!("/lol/champion-mastery/v4/champion-masteries/by-summoner/{}/by-champion/{}", encrypted_summoner_id, champion_id); let path_string = format!("/lol/champion-mastery/v4/champion-masteries/by-summoner/{}/by-champion/{}", encrypted_summoner_id, champion_id);
return self.requester_manager.get::<crate::champion_mastery_v4::ChampionMastery>( self.get::<crate::champion_mastery_v4::ChampionMastery>("champion-mastery-v4.getChampionMastery", region, path_string, None)
"champion-mastery-v4.getChampionMastery", region, &*path_string,
None).await; // false);
} }
/// Get a player's total champion mastery score, which is the sum of individual champion mastery levels. /// Get a player's total champion mastery score, which is the sum of individual champion mastery levels.
@ -50,33 +51,33 @@ impl<'a> RiotApi<'a> {
/// # Parameters /// # Parameters
/// * `region` - Region to query. /// * `region` - Region to query.
/// * `encryptedSummonerId` - Summoner ID associated with the player /// * `encryptedSummonerId` - Summoner ID associated with the player
pub async fn champion_mastery_v4_get_champion_mastery_score(&'a self, region: Region, encrypted_summoner_id: &str) -> Result<Option<i32>, reqwest::Error> { pub fn champion_mastery_v4_get_champion_mastery_score<'a>(&'a self, region: Region, encrypted_summoner_id: &str)
-> impl Future<Output = Result<Option<i32>, reqwest::Error>> + 'a
{
let path_string = format!("/lol/champion-mastery/v4/scores/by-summoner/{}", encrypted_summoner_id); let path_string = format!("/lol/champion-mastery/v4/scores/by-summoner/{}", encrypted_summoner_id);
return self.requester_manager.get::<i32>( self.get::<i32>("champion-mastery-v4.getChampionMasteryScore", region, path_string, None)
"champion-mastery-v4.getChampionMasteryScore", region, &*path_string,
None).await; // false);
} }
} }
// ChampionV3 // ChampionV3
impl<'a> RiotApi<'a> { impl RiotApi {
/// Returns champion rotations, including free-to-play and low-level free-to-play rotations (REST) /// Returns champion rotations, including free-to-play and low-level free-to-play rotations (REST)
/// # Official API Reference /// # Official API Reference
/// <a href="https://developer.riotgames.com/api-methods/#champion-v3/GET_getChampionInfo">https://developer.riotgames.com/api-methods/#champion-v3/GET_getChampionInfo</a> /// <a href="https://developer.riotgames.com/api-methods/#champion-v3/GET_getChampionInfo">https://developer.riotgames.com/api-methods/#champion-v3/GET_getChampionInfo</a>
/// # Parameters /// # Parameters
/// * `region` - Region to query. /// * `region` - Region to query.
pub async fn champion_v3_get_champion_info(&'a self, region: Region) -> Result<Option<crate::champion_v3::ChampionInfo>, reqwest::Error> { pub fn champion_v3_get_champion_info<'a>(&'a self, region: Region)
let path_string = "/lol/platform/v3/champion-rotations"; -> impl Future<Output = Result<Option<crate::champion_v3::ChampionInfo>, reqwest::Error>> + 'a
return self.requester_manager.get::<crate::champion_v3::ChampionInfo>( {
"champion-v3.getChampionInfo", region, &*path_string, let path_string = "/lol/platform/v3/champion-rotations".to_owned();
None).await; // false); self.get::<crate::champion_v3::ChampionInfo>("champion-v3.getChampionInfo", region, path_string, None)
} }
} }
// LeagueExpV4 // LeagueExpV4
impl<'a> RiotApi<'a> { impl RiotApi {
/// Get all the league entries. /// Get all the league entries.
/// # Official API Reference /// # Official API Reference
/// <a href="https://developer.riotgames.com/api-methods/#league-exp-v4/GET_getLeagueEntries">https://developer.riotgames.com/api-methods/#league-exp-v4/GET_getLeagueEntries</a> /// <a href="https://developer.riotgames.com/api-methods/#league-exp-v4/GET_getLeagueEntries">https://developer.riotgames.com/api-methods/#league-exp-v4/GET_getLeagueEntries</a>
@ -86,31 +87,31 @@ impl<'a> RiotApi<'a> {
/// * `tier` /// * `tier`
/// * `division` /// * `division`
/// * `page` (optional) - Starts with page 1. /// * `page` (optional) - Starts with page 1.
pub async fn league_exp_v4_get_league_entries(&'a self, region: Region, division: &str, tier: &str, queue: &str, page: Option<i32>) -> Result<Option<Vec<crate::league_exp_v4::LeagueEntry>>, reqwest::Error> { pub fn league_exp_v4_get_league_entries<'a>(&'a self, region: Region, division: &str, tier: &str, queue: &str, page: Option<i32>)
-> impl Future<Output = Result<Option<Vec<crate::league_exp_v4::LeagueEntry>>, reqwest::Error>> + 'a
{
let mut query_params = Serializer::new(String::new()); let mut query_params = Serializer::new(String::new());
if let Some(page) = page { query_params.append_pair("page", &*page.to_string()); }; if let Some(page) = page { query_params.append_pair("page", &*page.to_string()); };
let query_string = query_params.finish(); let query_string = query_params.finish();
let path_string = format!("/lol/league-exp/v4/entries/{}/{}/{}", division, tier, queue); let path_string = format!("/lol/league-exp/v4/entries/{}/{}/{}", division, tier, queue);
return self.requester_manager.get::<Vec<crate::league_exp_v4::LeagueEntry>>( self.get::<Vec<crate::league_exp_v4::LeagueEntry>>("league-exp-v4.getLeagueEntries", region, path_string, Some(query_string))
"league-exp-v4.getLeagueEntries", region, &*path_string,
Some(&*query_string)).await; // false);
} }
} }
// LeagueV4 // LeagueV4
impl<'a> RiotApi<'a> { impl RiotApi {
/// Get the challenger league for given queue. /// Get the challenger league for given queue.
/// # Official API Reference /// # Official API Reference
/// <a href="https://developer.riotgames.com/api-methods/#league-v4/GET_getChallengerLeague">https://developer.riotgames.com/api-methods/#league-v4/GET_getChallengerLeague</a> /// <a href="https://developer.riotgames.com/api-methods/#league-v4/GET_getChallengerLeague">https://developer.riotgames.com/api-methods/#league-v4/GET_getChallengerLeague</a>
/// # Parameters /// # Parameters
/// * `region` - Region to query. /// * `region` - Region to query.
/// * `queue` /// * `queue`
pub async fn league_v4_get_challenger_league(&'a self, region: Region, queue: &str) -> Result<Option<crate::league_v4::LeagueList>, reqwest::Error> { pub fn league_v4_get_challenger_league<'a>(&'a self, region: Region, queue: &str)
-> impl Future<Output = Result<Option<crate::league_v4::LeagueList>, reqwest::Error>> + 'a
{
let path_string = format!("/lol/league/v4/challengerleagues/by-queue/{}", queue); let path_string = format!("/lol/league/v4/challengerleagues/by-queue/{}", queue);
return self.requester_manager.get::<crate::league_v4::LeagueList>( self.get::<crate::league_v4::LeagueList>("league-v4.getChallengerLeague", region, path_string, None)
"league-v4.getChallengerLeague", region, &*path_string,
None).await; // false);
} }
/// Get league entries in all queues for a given summoner ID. /// Get league entries in all queues for a given summoner ID.
@ -119,11 +120,11 @@ impl<'a> RiotApi<'a> {
/// # Parameters /// # Parameters
/// * `region` - Region to query. /// * `region` - Region to query.
/// * `encryptedSummonerId` /// * `encryptedSummonerId`
pub async fn league_v4_get_league_entries_for_summoner(&'a self, region: Region, encrypted_summoner_id: &str) -> Result<Option<Vec<crate::league_v4::LeagueEntry>>, reqwest::Error> { pub fn league_v4_get_league_entries_for_summoner<'a>(&'a self, region: Region, encrypted_summoner_id: &str)
-> impl Future<Output = Result<Option<Vec<crate::league_v4::LeagueEntry>>, reqwest::Error>> + 'a
{
let path_string = format!("/lol/league/v4/entries/by-summoner/{}", encrypted_summoner_id); let path_string = format!("/lol/league/v4/entries/by-summoner/{}", encrypted_summoner_id);
return self.requester_manager.get::<Vec<crate::league_v4::LeagueEntry>>( self.get::<Vec<crate::league_v4::LeagueEntry>>("league-v4.getLeagueEntriesForSummoner", region, path_string, None)
"league-v4.getLeagueEntriesForSummoner", region, &*path_string,
None).await; // false);
} }
/// Get all the league entries. /// Get all the league entries.
@ -135,14 +136,14 @@ impl<'a> RiotApi<'a> {
/// * `tier` /// * `tier`
/// * `queue` - Note that the queue value must be a valid ranked queue. /// * `queue` - Note that the queue value must be a valid ranked queue.
/// * `page` (optional) - Starts with page 1. /// * `page` (optional) - Starts with page 1.
pub async fn league_v4_get_league_entries(&'a self, region: Region, queue: &str, tier: &str, division: &str, page: Option<i32>) -> Result<Option<Vec<crate::league_v4::LeagueEntry>>, reqwest::Error> { pub fn league_v4_get_league_entries<'a>(&'a self, region: Region, queue: &str, tier: &str, division: &str, page: Option<i32>)
-> impl Future<Output = Result<Option<Vec<crate::league_v4::LeagueEntry>>, reqwest::Error>> + 'a
{
let mut query_params = Serializer::new(String::new()); let mut query_params = Serializer::new(String::new());
if let Some(page) = page { query_params.append_pair("page", &*page.to_string()); }; if let Some(page) = page { query_params.append_pair("page", &*page.to_string()); };
let query_string = query_params.finish(); let query_string = query_params.finish();
let path_string = format!("/lol/league/v4/entries/{}/{}/{}", queue, tier, division); let path_string = format!("/lol/league/v4/entries/{}/{}/{}", queue, tier, division);
return self.requester_manager.get::<Vec<crate::league_v4::LeagueEntry>>( self.get::<Vec<crate::league_v4::LeagueEntry>>("league-v4.getLeagueEntries", region, path_string, Some(query_string))
"league-v4.getLeagueEntries", region, &*path_string,
Some(&*query_string)).await; // false);
} }
/// Get the grandmaster league of a specific queue. /// Get the grandmaster league of a specific queue.
@ -151,11 +152,11 @@ impl<'a> RiotApi<'a> {
/// # Parameters /// # Parameters
/// * `region` - Region to query. /// * `region` - Region to query.
/// * `queue` /// * `queue`
pub async fn league_v4_get_grandmaster_league(&'a self, region: Region, queue: &str) -> Result<Option<crate::league_v4::LeagueList>, reqwest::Error> { pub fn league_v4_get_grandmaster_league<'a>(&'a self, region: Region, queue: &str)
-> impl Future<Output = Result<Option<crate::league_v4::LeagueList>, reqwest::Error>> + 'a
{
let path_string = format!("/lol/league/v4/grandmasterleagues/by-queue/{}", queue); let path_string = format!("/lol/league/v4/grandmasterleagues/by-queue/{}", queue);
return self.requester_manager.get::<crate::league_v4::LeagueList>( self.get::<crate::league_v4::LeagueList>("league-v4.getGrandmasterLeague", region, path_string, None)
"league-v4.getGrandmasterLeague", region, &*path_string,
None).await; // false);
} }
/// Get league with given ID, including inactive entries. /// Get league with given ID, including inactive entries.
@ -164,11 +165,11 @@ impl<'a> RiotApi<'a> {
/// # Parameters /// # Parameters
/// * `region` - Region to query. /// * `region` - Region to query.
/// * `leagueId` - The UUID of the league. /// * `leagueId` - The UUID of the league.
pub async fn league_v4_get_league_by_id(&'a self, region: Region, league_id: &str) -> Result<Option<crate::league_v4::LeagueList>, reqwest::Error> { pub fn league_v4_get_league_by_id<'a>(&'a self, region: Region, league_id: &str)
-> impl Future<Output = Result<Option<crate::league_v4::LeagueList>, reqwest::Error>> + 'a
{
let path_string = format!("/lol/league/v4/leagues/{}", league_id); let path_string = format!("/lol/league/v4/leagues/{}", league_id);
return self.requester_manager.get::<crate::league_v4::LeagueList>( self.get::<crate::league_v4::LeagueList>("league-v4.getLeagueById", region, path_string, None)
"league-v4.getLeagueById", region, &*path_string,
None).await; // false);
} }
/// Get the master league for given queue. /// Get the master league for given queue.
@ -177,17 +178,17 @@ impl<'a> RiotApi<'a> {
/// # Parameters /// # Parameters
/// * `region` - Region to query. /// * `region` - Region to query.
/// * `queue` /// * `queue`
pub async fn league_v4_get_master_league(&'a self, region: Region, queue: &str) -> Result<Option<crate::league_v4::LeagueList>, reqwest::Error> { pub fn league_v4_get_master_league<'a>(&'a self, region: Region, queue: &str)
-> impl Future<Output = Result<Option<crate::league_v4::LeagueList>, reqwest::Error>> + 'a
{
let path_string = format!("/lol/league/v4/masterleagues/by-queue/{}", queue); let path_string = format!("/lol/league/v4/masterleagues/by-queue/{}", queue);
return self.requester_manager.get::<crate::league_v4::LeagueList>( self.get::<crate::league_v4::LeagueList>("league-v4.getMasterLeague", region, path_string, None)
"league-v4.getMasterLeague", region, &*path_string,
None).await; // false);
} }
} }
// LolStatusV3 // LolStatusV3
impl<'a> RiotApi<'a> { impl RiotApi {
/// Get League of Legends status for the given shard. /// Get League of Legends status for the given shard.
/// ## Rate Limit Notes /// ## Rate Limit Notes
/// Requests to this API are not counted against the application Rate Limits. /// Requests to this API are not counted against the application Rate Limits.
@ -195,28 +196,28 @@ impl<'a> RiotApi<'a> {
/// <a href="https://developer.riotgames.com/api-methods/#lol-status-v3/GET_getShardData">https://developer.riotgames.com/api-methods/#lol-status-v3/GET_getShardData</a> /// <a href="https://developer.riotgames.com/api-methods/#lol-status-v3/GET_getShardData">https://developer.riotgames.com/api-methods/#lol-status-v3/GET_getShardData</a>
/// # Parameters /// # Parameters
/// * `region` - Region to query. /// * `region` - Region to query.
pub async fn lol_status_v3_get_shard_data(&'a self, region: Region) -> Result<Option<crate::lol_status_v3::ShardStatus>, reqwest::Error> { pub fn lol_status_v3_get_shard_data<'a>(&'a self, region: Region)
let path_string = "/lol/status/v3/shard-data"; -> impl Future<Output = Result<Option<crate::lol_status_v3::ShardStatus>, reqwest::Error>> + 'a
return self.requester_manager.get::<crate::lol_status_v3::ShardStatus>( {
"lol-status-v3.getShardData", region, &*path_string, let path_string = "/lol/status/v3/shard-data".to_owned();
None).await; // true); self.get::<crate::lol_status_v3::ShardStatus>("lol-status-v3.getShardData", region, path_string, None)
} }
} }
// MatchV4 // MatchV4
impl<'a> RiotApi<'a> { impl RiotApi {
/// Get match IDs by tournament code. /// Get match IDs by tournament code.
/// # Official API Reference /// # Official API Reference
/// <a href="https://developer.riotgames.com/api-methods/#match-v4/GET_getMatchIdsByTournamentCode">https://developer.riotgames.com/api-methods/#match-v4/GET_getMatchIdsByTournamentCode</a> /// <a href="https://developer.riotgames.com/api-methods/#match-v4/GET_getMatchIdsByTournamentCode">https://developer.riotgames.com/api-methods/#match-v4/GET_getMatchIdsByTournamentCode</a>
/// # Parameters /// # Parameters
/// * `region` - Region to query. /// * `region` - Region to query.
/// * `tournamentCode` - The tournament code. /// * `tournamentCode` - The tournament code.
pub async fn match_v4_get_match_ids_by_tournament_code(&'a self, region: Region, tournament_code: &str) -> Result<Option<Vec<i64>>, reqwest::Error> { pub fn match_v4_get_match_ids_by_tournament_code<'a>(&'a self, region: Region, tournament_code: &str)
-> impl Future<Output = Result<Option<Vec<i64>>, reqwest::Error>> + 'a
{
let path_string = format!("/lol/match/v4/matches/by-tournament-code/{}/ids", tournament_code); let path_string = format!("/lol/match/v4/matches/by-tournament-code/{}/ids", tournament_code);
return self.requester_manager.get::<Vec<i64>>( self.get::<Vec<i64>>("match-v4.getMatchIdsByTournamentCode", region, path_string, None)
"match-v4.getMatchIdsByTournamentCode", region, &*path_string,
None).await; // false);
} }
/// Get match by match ID. /// Get match by match ID.
@ -225,11 +226,11 @@ impl<'a> RiotApi<'a> {
/// # Parameters /// # Parameters
/// * `region` - Region to query. /// * `region` - Region to query.
/// * `matchId` - The match ID. /// * `matchId` - The match ID.
pub async fn match_v4_get_match(&'a self, region: Region, match_id: i64) -> Result<Option<crate::match_v4::Match>, reqwest::Error> { pub fn match_v4_get_match<'a>(&'a self, region: Region, match_id: i64)
-> impl Future<Output = Result<Option<crate::match_v4::Match>, reqwest::Error>> + 'a
{
let path_string = format!("/lol/match/v4/matches/{}", match_id); let path_string = format!("/lol/match/v4/matches/{}", match_id);
return self.requester_manager.get::<crate::match_v4::Match>( self.get::<crate::match_v4::Match>("match-v4.getMatch", region, path_string, None)
"match-v4.getMatch", region, &*path_string,
None).await; // false);
} }
/// Get match by match ID and tournament code. /// Get match by match ID and tournament code.
@ -239,11 +240,11 @@ impl<'a> RiotApi<'a> {
/// * `region` - Region to query. /// * `region` - Region to query.
/// * `tournamentCode` - The tournament code. /// * `tournamentCode` - The tournament code.
/// * `matchId` - The match ID. /// * `matchId` - The match ID.
pub async fn match_v4_get_match_by_tournament_code(&'a self, region: Region, match_id: i64, tournament_code: &str) -> Result<Option<crate::match_v4::Match>, reqwest::Error> { pub fn match_v4_get_match_by_tournament_code<'a>(&'a self, region: Region, match_id: i64, tournament_code: &str)
-> impl Future<Output = Result<Option<crate::match_v4::Match>, reqwest::Error>> + 'a
{
let path_string = format!("/lol/match/v4/matches/{}/by-tournament-code/{}", match_id, tournament_code); let path_string = format!("/lol/match/v4/matches/{}/by-tournament-code/{}", match_id, tournament_code);
return self.requester_manager.get::<crate::match_v4::Match>( self.get::<crate::match_v4::Match>("match-v4.getMatchByTournamentCode", region, path_string, None)
"match-v4.getMatchByTournamentCode", region, &*path_string,
None).await; // false);
} }
/// Get matchlist for games played on given account ID and platform ID and filtered using given filter parameters, if any. /// Get matchlist for games played on given account ID and platform ID and filtered using given filter parameters, if any.
@ -265,7 +266,9 @@ impl<'a> RiotApi<'a> {
/// * `beginTime` (optional) - The begin time to use for filtering matchlist specified as epoch milliseconds. If beginTime is specified, but not endTime, then endTime defaults to the the current unix timestamp in milliseconds (the maximum time range limitation is not observed in this specific case). If endTime is specified, but not beginTime, then beginTime defaults to the start of the account's match history returning a 400 due to the maximum time range limitation. If both are specified, then endTime should be greater than beginTime. The maximum time range allowed is one week, otherwise a 400 error code is returned. /// * `beginTime` (optional) - The begin time to use for filtering matchlist specified as epoch milliseconds. If beginTime is specified, but not endTime, then endTime defaults to the the current unix timestamp in milliseconds (the maximum time range limitation is not observed in this specific case). If endTime is specified, but not beginTime, then beginTime defaults to the start of the account's match history returning a 400 due to the maximum time range limitation. If both are specified, then endTime should be greater than beginTime. The maximum time range allowed is one week, otherwise a 400 error code is returned.
/// * `endIndex` (optional) - The end index to use for filtering matchlist. If beginIndex is specified, but not endIndex, then endIndex defaults to beginIndex+100. If endIndex is specified, but not beginIndex, then beginIndex defaults to 0. If both are specified, then endIndex must be greater than beginIndex. The maximum range allowed is 100, otherwise a 400 error code is returned. /// * `endIndex` (optional) - The end index to use for filtering matchlist. If beginIndex is specified, but not endIndex, then endIndex defaults to beginIndex+100. If endIndex is specified, but not beginIndex, then beginIndex defaults to 0. If both are specified, then endIndex must be greater than beginIndex. The maximum range allowed is 100, otherwise a 400 error code is returned.
/// * `beginIndex` (optional) - The begin index to use for filtering matchlist. If beginIndex is specified, but not endIndex, then endIndex defaults to beginIndex+100. If endIndex is specified, but not beginIndex, then beginIndex defaults to 0. If both are specified, then endIndex must be greater than beginIndex. The maximum range allowed is 100, otherwise a 400 error code is returned. /// * `beginIndex` (optional) - The begin index to use for filtering matchlist. If beginIndex is specified, but not endIndex, then endIndex defaults to beginIndex+100. If endIndex is specified, but not beginIndex, then beginIndex defaults to 0. If both are specified, then endIndex must be greater than beginIndex. The maximum range allowed is 100, otherwise a 400 error code is returned.
pub async fn match_v4_get_matchlist(&'a self, region: Region, encrypted_account_id: &str, champion: Option<std::vec::Vec<i32>>, queue: Option<std::vec::Vec<i32>>, season: Option<std::vec::Vec<i32>>, end_time: Option<i64>, begin_time: Option<i64>, end_index: Option<i32>, begin_index: Option<i32>) -> Result<Option<crate::match_v4::Matchlist>, reqwest::Error> { pub fn match_v4_get_matchlist<'a>(&'a self, region: Region, encrypted_account_id: &str, champion: Option<std::vec::Vec<i32>>, queue: Option<std::vec::Vec<i32>>, season: Option<std::vec::Vec<i32>>, end_time: Option<i64>, begin_time: Option<i64>, end_index: Option<i32>, begin_index: Option<i32>)
-> impl Future<Output = Result<Option<crate::match_v4::Matchlist>, reqwest::Error>> + 'a
{
let mut query_params = Serializer::new(String::new()); let mut query_params = Serializer::new(String::new());
if let Some(champion) = champion { query_params.extend_pairs(champion.iter().map(|w| ("champion", w.to_string()))); }; if let Some(champion) = champion { query_params.extend_pairs(champion.iter().map(|w| ("champion", w.to_string()))); };
if let Some(queue) = queue { query_params.extend_pairs(queue.iter().map(|w| ("queue", w.to_string()))); }; if let Some(queue) = queue { query_params.extend_pairs(queue.iter().map(|w| ("queue", w.to_string()))); };
@ -276,9 +279,7 @@ impl<'a> RiotApi<'a> {
if let Some(begin_index) = begin_index { query_params.append_pair("beginIndex", &*begin_index.to_string()); }; if let Some(begin_index) = begin_index { query_params.append_pair("beginIndex", &*begin_index.to_string()); };
let query_string = query_params.finish(); let query_string = query_params.finish();
let path_string = format!("/lol/match/v4/matchlists/by-account/{}", encrypted_account_id); let path_string = format!("/lol/match/v4/matchlists/by-account/{}", encrypted_account_id);
return self.requester_manager.get::<crate::match_v4::Matchlist>( self.get::<crate::match_v4::Matchlist>("match-v4.getMatchlist", region, path_string, Some(query_string))
"match-v4.getMatchlist", region, &*path_string,
Some(&*query_string)).await; // false);
} }
/// Get match timeline by match ID. /// Get match timeline by match ID.
@ -289,28 +290,28 @@ impl<'a> RiotApi<'a> {
/// # Parameters /// # Parameters
/// * `region` - Region to query. /// * `region` - Region to query.
/// * `matchId` - The match ID. /// * `matchId` - The match ID.
pub async fn match_v4_get_match_timeline(&'a self, region: Region, match_id: i64) -> Result<Option<crate::match_v4::MatchTimeline>, reqwest::Error> { pub fn match_v4_get_match_timeline<'a>(&'a self, region: Region, match_id: i64)
-> impl Future<Output = Result<Option<crate::match_v4::MatchTimeline>, reqwest::Error>> + 'a
{
let path_string = format!("/lol/match/v4/timelines/by-match/{}", match_id); let path_string = format!("/lol/match/v4/timelines/by-match/{}", match_id);
return self.requester_manager.get::<crate::match_v4::MatchTimeline>( self.get::<crate::match_v4::MatchTimeline>("match-v4.getMatchTimeline", region, path_string, None)
"match-v4.getMatchTimeline", region, &*path_string,
None).await; // false);
} }
} }
// SpectatorV4 // SpectatorV4
impl<'a> RiotApi<'a> { impl RiotApi {
/// Get current game information for the given summoner ID. /// Get current game information for the given summoner ID.
/// # Official API Reference /// # Official API Reference
/// <a href="https://developer.riotgames.com/api-methods/#spectator-v4/GET_getCurrentGameInfoBySummoner">https://developer.riotgames.com/api-methods/#spectator-v4/GET_getCurrentGameInfoBySummoner</a> /// <a href="https://developer.riotgames.com/api-methods/#spectator-v4/GET_getCurrentGameInfoBySummoner">https://developer.riotgames.com/api-methods/#spectator-v4/GET_getCurrentGameInfoBySummoner</a>
/// # Parameters /// # Parameters
/// * `region` - Region to query. /// * `region` - Region to query.
/// * `encryptedSummonerId` - The ID of the summoner. /// * `encryptedSummonerId` - The ID of the summoner.
pub async fn spectator_v4_get_current_game_info_by_summoner(&'a self, region: Region, encrypted_summoner_id: &str) -> Result<Option<crate::spectator_v4::CurrentGameInfo>, reqwest::Error> { pub fn spectator_v4_get_current_game_info_by_summoner<'a>(&'a self, region: Region, encrypted_summoner_id: &str)
-> impl Future<Output = Result<Option<crate::spectator_v4::CurrentGameInfo>, reqwest::Error>> + 'a
{
let path_string = format!("/lol/spectator/v4/active-games/by-summoner/{}", encrypted_summoner_id); let path_string = format!("/lol/spectator/v4/active-games/by-summoner/{}", encrypted_summoner_id);
return self.requester_manager.get::<crate::spectator_v4::CurrentGameInfo>( self.get::<crate::spectator_v4::CurrentGameInfo>("spectator-v4.getCurrentGameInfoBySummoner", region, path_string, None)
"spectator-v4.getCurrentGameInfoBySummoner", region, &*path_string,
None).await; // false);
} }
/// Get list of featured games. /// Get list of featured games.
@ -318,28 +319,28 @@ impl<'a> RiotApi<'a> {
/// <a href="https://developer.riotgames.com/api-methods/#spectator-v4/GET_getFeaturedGames">https://developer.riotgames.com/api-methods/#spectator-v4/GET_getFeaturedGames</a> /// <a href="https://developer.riotgames.com/api-methods/#spectator-v4/GET_getFeaturedGames">https://developer.riotgames.com/api-methods/#spectator-v4/GET_getFeaturedGames</a>
/// # Parameters /// # Parameters
/// * `region` - Region to query. /// * `region` - Region to query.
pub async fn spectator_v4_get_featured_games(&'a self, region: Region) -> Result<Option<crate::spectator_v4::FeaturedGames>, reqwest::Error> { pub fn spectator_v4_get_featured_games<'a>(&'a self, region: Region)
let path_string = "/lol/spectator/v4/featured-games"; -> impl Future<Output = Result<Option<crate::spectator_v4::FeaturedGames>, reqwest::Error>> + 'a
return self.requester_manager.get::<crate::spectator_v4::FeaturedGames>( {
"spectator-v4.getFeaturedGames", region, &*path_string, let path_string = "/lol/spectator/v4/featured-games".to_owned();
None).await; // false); self.get::<crate::spectator_v4::FeaturedGames>("spectator-v4.getFeaturedGames", region, path_string, None)
} }
} }
// SummonerV4 // SummonerV4
impl<'a> RiotApi<'a> { impl RiotApi {
/// Get a summoner by account ID. /// Get a summoner by account ID.
/// # Official API Reference /// # Official API Reference
/// <a href="https://developer.riotgames.com/api-methods/#summoner-v4/GET_getByAccountId">https://developer.riotgames.com/api-methods/#summoner-v4/GET_getByAccountId</a> /// <a href="https://developer.riotgames.com/api-methods/#summoner-v4/GET_getByAccountId">https://developer.riotgames.com/api-methods/#summoner-v4/GET_getByAccountId</a>
/// # Parameters /// # Parameters
/// * `region` - Region to query. /// * `region` - Region to query.
/// * `encryptedAccountId` /// * `encryptedAccountId`
pub async fn summoner_v4_get_by_account_id(&'a self, region: Region, encrypted_account_id: &str) -> Result<Option<crate::summoner_v4::Summoner>, reqwest::Error> { pub fn summoner_v4_get_by_account_id<'a>(&'a self, region: Region, encrypted_account_id: &str)
-> impl Future<Output = Result<Option<crate::summoner_v4::Summoner>, reqwest::Error>> + 'a
{
let path_string = format!("/lol/summoner/v4/summoners/by-account/{}", encrypted_account_id); let path_string = format!("/lol/summoner/v4/summoners/by-account/{}", encrypted_account_id);
return self.requester_manager.get::<crate::summoner_v4::Summoner>( self.get::<crate::summoner_v4::Summoner>("summoner-v4.getByAccountId", region, path_string, None)
"summoner-v4.getByAccountId", region, &*path_string,
None).await; // false);
} }
/// Get a summoner by summoner name. /// Get a summoner by summoner name.
@ -348,11 +349,11 @@ impl<'a> RiotApi<'a> {
/// # Parameters /// # Parameters
/// * `region` - Region to query. /// * `region` - Region to query.
/// * `summonerName` - Summoner Name /// * `summonerName` - Summoner Name
pub async fn summoner_v4_get_by_summoner_name(&'a self, region: Region, summoner_name: &str) -> Result<Option<crate::summoner_v4::Summoner>, reqwest::Error> { pub fn summoner_v4_get_by_summoner_name<'a>(&'a self, region: Region, summoner_name: &str)
-> impl Future<Output = Result<Option<crate::summoner_v4::Summoner>, reqwest::Error>> + 'a
{
let path_string = format!("/lol/summoner/v4/summoners/by-name/{}", summoner_name); let path_string = format!("/lol/summoner/v4/summoners/by-name/{}", summoner_name);
return self.requester_manager.get::<crate::summoner_v4::Summoner>( self.get::<crate::summoner_v4::Summoner>("summoner-v4.getBySummonerName", region, path_string, None)
"summoner-v4.getBySummonerName", region, &*path_string,
None).await; // false);
} }
/// Get a summoner by PUUID. /// Get a summoner by PUUID.
@ -361,11 +362,11 @@ impl<'a> RiotApi<'a> {
/// # Parameters /// # Parameters
/// * `region` - Region to query. /// * `region` - Region to query.
/// * `encryptedPUUID` - Summoner ID /// * `encryptedPUUID` - Summoner ID
pub async fn summoner_v4_get_by_puuid(&'a self, region: Region, encrypted_puuid: &str) -> Result<Option<crate::summoner_v4::Summoner>, reqwest::Error> { pub fn summoner_v4_get_by_puuid<'a>(&'a self, region: Region, encrypted_puuid: &str)
-> impl Future<Output = Result<Option<crate::summoner_v4::Summoner>, reqwest::Error>> + 'a
{
let path_string = format!("/lol/summoner/v4/summoners/by-puuid/{}", encrypted_puuid); let path_string = format!("/lol/summoner/v4/summoners/by-puuid/{}", encrypted_puuid);
return self.requester_manager.get::<crate::summoner_v4::Summoner>( self.get::<crate::summoner_v4::Summoner>("summoner-v4.getByPUUID", region, path_string, None)
"summoner-v4.getByPUUID", region, &*path_string,
None).await; // false);
} }
/// Get a summoner by summoner ID. /// Get a summoner by summoner ID.
@ -374,62 +375,62 @@ impl<'a> RiotApi<'a> {
/// # Parameters /// # Parameters
/// * `region` - Region to query. /// * `region` - Region to query.
/// * `encryptedSummonerId` - Summoner ID /// * `encryptedSummonerId` - Summoner ID
pub async fn summoner_v4_get_by_summoner_id(&'a self, region: Region, encrypted_summoner_id: &str) -> Result<Option<crate::summoner_v4::Summoner>, reqwest::Error> { pub fn summoner_v4_get_by_summoner_id<'a>(&'a self, region: Region, encrypted_summoner_id: &str)
-> impl Future<Output = Result<Option<crate::summoner_v4::Summoner>, reqwest::Error>> + 'a
{
let path_string = format!("/lol/summoner/v4/summoners/{}", encrypted_summoner_id); let path_string = format!("/lol/summoner/v4/summoners/{}", encrypted_summoner_id);
return self.requester_manager.get::<crate::summoner_v4::Summoner>( self.get::<crate::summoner_v4::Summoner>("summoner-v4.getBySummonerId", region, path_string, None)
"summoner-v4.getBySummonerId", region, &*path_string,
None).await; // false);
} }
} }
// ThirdPartyCodeV4 // ThirdPartyCodeV4
impl<'a> RiotApi<'a> { impl RiotApi {
/// Get third party code for a given summoner ID. /// Get third party code for a given summoner ID.
/// # Official API Reference /// # Official API Reference
/// <a href="https://developer.riotgames.com/api-methods/#third-party-code-v4/GET_getThirdPartyCodeBySummonerId">https://developer.riotgames.com/api-methods/#third-party-code-v4/GET_getThirdPartyCodeBySummonerId</a> /// <a href="https://developer.riotgames.com/api-methods/#third-party-code-v4/GET_getThirdPartyCodeBySummonerId">https://developer.riotgames.com/api-methods/#third-party-code-v4/GET_getThirdPartyCodeBySummonerId</a>
/// # Parameters /// # Parameters
/// * `region` - Region to query. /// * `region` - Region to query.
/// * `encryptedSummonerId` /// * `encryptedSummonerId`
pub async fn third_party_code_v4_get_third_party_code_by_summoner_id(&'a self, region: Region, encrypted_summoner_id: &str) -> Result<Option<String>, reqwest::Error> { pub fn third_party_code_v4_get_third_party_code_by_summoner_id<'a>(&'a self, region: Region, encrypted_summoner_id: &str)
-> impl Future<Output = Result<Option<String>, reqwest::Error>> + 'a
{
let path_string = format!("/lol/platform/v4/third-party-code/by-summoner/{}", encrypted_summoner_id); let path_string = format!("/lol/platform/v4/third-party-code/by-summoner/{}", encrypted_summoner_id);
return self.requester_manager.get::<String>( self.get::<String>("third-party-code-v4.getThirdPartyCodeBySummonerId", region, path_string, None)
"third-party-code-v4.getThirdPartyCodeBySummonerId", region, &*path_string,
None).await; // false);
} }
} }
// TournamentStubV4 // TournamentStubV4
impl<'a> RiotApi<'a> { impl RiotApi {
/// Gets a mock list of lobby events by tournament code. /// Gets a mock list of lobby events by tournament code.
/// # Official API Reference /// # Official API Reference
/// <a href="https://developer.riotgames.com/api-methods/#tournament-stub-v4/GET_getLobbyEventsByCode">https://developer.riotgames.com/api-methods/#tournament-stub-v4/GET_getLobbyEventsByCode</a> /// <a href="https://developer.riotgames.com/api-methods/#tournament-stub-v4/GET_getLobbyEventsByCode">https://developer.riotgames.com/api-methods/#tournament-stub-v4/GET_getLobbyEventsByCode</a>
/// # Parameters /// # Parameters
/// * `region` - Region to query. /// * `region` - Region to query.
/// * `tournamentCode` - The short code to look up lobby events for /// * `tournamentCode` - The short code to look up lobby events for
pub async fn tournament_stub_v4_get_lobby_events_by_code(&'a self, region: Region, tournament_code: &str) -> Result<Option<crate::tournament_stub_v4::LobbyEventWrapper>, reqwest::Error> { pub fn tournament_stub_v4_get_lobby_events_by_code<'a>(&'a self, region: Region, tournament_code: &str)
-> impl Future<Output = Result<Option<crate::tournament_stub_v4::LobbyEventWrapper>, reqwest::Error>> + 'a
{
let path_string = format!("/lol/tournament-stub/v4/lobby-events/by-code/{}", tournament_code); let path_string = format!("/lol/tournament-stub/v4/lobby-events/by-code/{}", tournament_code);
return self.requester_manager.get::<crate::tournament_stub_v4::LobbyEventWrapper>( self.get::<crate::tournament_stub_v4::LobbyEventWrapper>("tournament-stub-v4.getLobbyEventsByCode", region, path_string, None)
"tournament-stub-v4.getLobbyEventsByCode", region, &*path_string,
None).await; // false);
} }
} }
// TournamentV4 // TournamentV4
impl<'a> RiotApi<'a> { impl RiotApi {
/// Returns the tournament code DTO associated with a tournament code string. /// Returns the tournament code DTO associated with a tournament code string.
/// # Official API Reference /// # Official API Reference
/// <a href="https://developer.riotgames.com/api-methods/#tournament-v4/GET_getTournamentCode">https://developer.riotgames.com/api-methods/#tournament-v4/GET_getTournamentCode</a> /// <a href="https://developer.riotgames.com/api-methods/#tournament-v4/GET_getTournamentCode">https://developer.riotgames.com/api-methods/#tournament-v4/GET_getTournamentCode</a>
/// # Parameters /// # Parameters
/// * `region` - Region to query. /// * `region` - Region to query.
/// * `tournamentCode` - The tournament code string. /// * `tournamentCode` - The tournament code string.
pub async fn tournament_v4_get_tournament_code(&'a self, region: Region, tournament_code: &str) -> Result<Option<crate::tournament_v4::TournamentCode>, reqwest::Error> { pub fn tournament_v4_get_tournament_code<'a>(&'a self, region: Region, tournament_code: &str)
-> impl Future<Output = Result<Option<crate::tournament_v4::TournamentCode>, reqwest::Error>> + 'a
{
let path_string = format!("/lol/tournament/v4/codes/{}", tournament_code); let path_string = format!("/lol/tournament/v4/codes/{}", tournament_code);
return self.requester_manager.get::<crate::tournament_v4::TournamentCode>( self.get::<crate::tournament_v4::TournamentCode>("tournament-v4.getTournamentCode", region, path_string, None)
"tournament-v4.getTournamentCode", region, &*path_string,
None).await; // false);
} }
/// Gets a list of lobby events by tournament code. /// Gets a list of lobby events by tournament code.
@ -438,11 +439,11 @@ impl<'a> RiotApi<'a> {
/// # Parameters /// # Parameters
/// * `region` - Region to query. /// * `region` - Region to query.
/// * `tournamentCode` - The short code to look up lobby events for /// * `tournamentCode` - The short code to look up lobby events for
pub async fn tournament_v4_get_lobby_events_by_code(&'a self, region: Region, tournament_code: &str) -> Result<Option<crate::tournament_v4::LobbyEventWrapper>, reqwest::Error> { pub fn tournament_v4_get_lobby_events_by_code<'a>(&'a self, region: Region, tournament_code: &str)
-> impl Future<Output = Result<Option<crate::tournament_v4::LobbyEventWrapper>, reqwest::Error>> + 'a
{
let path_string = format!("/lol/tournament/v4/lobby-events/by-code/{}", tournament_code); let path_string = format!("/lol/tournament/v4/lobby-events/by-code/{}", tournament_code);
return self.requester_manager.get::<crate::tournament_v4::LobbyEventWrapper>( self.get::<crate::tournament_v4::LobbyEventWrapper>("tournament-v4.getLobbyEventsByCode", region, path_string, None)
"tournament-v4.getLobbyEventsByCode", region, &*path_string,
None).await; // false);
} }
} }

View File

@ -1,13 +1,13 @@
#[derive(Debug)] #[derive(Debug)]
pub struct RiotApiConfig<'a> { pub struct RiotApiConfig {
pub api_key: &'a str, pub api_key: String,
pub retries: u8, pub retries: u8,
} }
impl<'a> RiotApiConfig<'a> { impl RiotApiConfig {
pub fn with_key(api_key: &'a str) -> Self { pub fn with_key<T: Into<String>>(api_key: T) -> Self {
Self { Self {
api_key: api_key, api_key: api_key.into(),
retries: 3 // TODO defaults. retries: 3 // TODO defaults.
} }
} }

View File

@ -100,7 +100,7 @@ function formatAddQueryParam(param) {
function formatRouteArgument(route, pathParams = []) { function formatRouteArgument(route, pathParams = []) {
if (!pathParams.length) if (!pathParams.length)
return `"${route}"`; return `"${route}".to_owned()`;
route = route.replace(/\{\S+?\}/g, '{}'); route = route.replace(/\{\S+?\}/g, '{}');
const args = pathParams const args = pathParams

View File

@ -9,6 +9,7 @@
// http://www.mingweisamuel.com/riotapi-schema/tool/ // http://www.mingweisamuel.com/riotapi-schema/tool/
// Version {{= spec.info.version }} // Version {{= spec.info.version }}
use std::future::Future;
use std::vec::Vec; use std::vec::Vec;
use reqwest; use reqwest;
@ -30,7 +31,7 @@ use crate::riot_api::RiotApi;
}} }}
// {{= endpoint }} // {{= endpoint }}
impl<'a> RiotApi<'a> { impl RiotApi {
{{ {{
for (let [ route, path ] of endpointMethods) for (let [ route, path ] of endpointMethods)
{ {
@ -105,7 +106,9 @@ impl<'a> RiotApi<'a> {
} }
} }
}} }}
pub async fn {{= dotUtils.changeCase.snakeCase(endpoint) }}_{{= method }}(&'a self, region: Region{{= argBuilder.join('') }}) -> Result<Option<{{= returnType }}>, reqwest::Error> { pub fn {{= dotUtils.changeCase.snakeCase(endpoint) }}_{{= method }}<'a>(&'a self, region: Region{{= argBuilder.join('') }})
-> impl Future<Output = Result<Option<{{= returnType }}>, reqwest::Error>> + 'a
{
{{? queryParams.length }} {{? queryParams.length }}
let mut query_params = Serializer::new(String::new()); let mut query_params = Serializer::new(String::new());
{{ {{
@ -119,9 +122,7 @@ impl<'a> RiotApi<'a> {
let query_string = query_params.finish(); let query_string = query_params.finish();
{{?}} {{?}}
let path_string = {{= routeArgument }}; let path_string = {{= routeArgument }};
return self.requester_manager.get::<{{= returnType }}>( self.get::<{{= returnType }}>("{{= operationId }}", region, path_string, {{= queryParams.length ? 'Some(query_string)' : 'None' }})
"{{= operationId }}", region, &*path_string,
{{= queryParams.length ? 'Some(&*query_string)' : 'None' }}).await; // {{= rateLimitExcluded }});
} }
{{ {{