use std::collections::HashMap;
use crate::{
prelude::RiotApiClient,
models::{
ApiResult,
routing::PlatformRouting,
league::champion_mastery::ChampionMasteryDto,
}
};
impl RiotApiClient {
pub async fn champion_mastery_by_puuid(
&self,
platform_routing: Option<PlatformRouting>,
puuid: String,
) -> ApiResult<Vec<ChampionMasteryDto>> {
let routing = platform_routing.unwrap_or(self.configuration.default_platform);
self.make_request(
format!("/lol/champion-mastery/v4/champion-masteries/by-puuid/{puuid}"),
routing,
reqwest::Method::GET,
HashMap::new(),
HashMap::new(),
None::<()>,
).await
}
pub async fn champion_mastery_by_puuid_champion_id(
&self,
platform_routing: Option<PlatformRouting>,
puuid: String,
champion_id: i32,
) -> ApiResult<ChampionMasteryDto> {
let routing = platform_routing.unwrap_or(self.configuration.default_platform);
self.make_request(
format!("/lol/champion-mastery/v4/champion-masteries/by-puuid/{puuid}/by-champion/{champion_id}"),
routing,
reqwest::Method::GET,
HashMap::new(),
HashMap::new(),
None::<()>,
).await
}
pub async fn champion_mastery_by_puuid_top(
&self,
platform_routing: Option<PlatformRouting>,
puuid: String,
count: Option<u16>,
) -> ApiResult<Vec<ChampionMasteryDto>> {
let routing = platform_routing.unwrap_or(self.configuration.default_platform);
let count = count.unwrap_or(3);
self.make_request(
format!("/lol/champion-mastery/v4/champion-masteries/by-puuid/{puuid}/top?count={count}"),
routing,
reqwest::Method::GET,
HashMap::new(),
HashMap::new(),
None::<()>,
).await
}
pub async fn champion_mastery_by_summoner_id(
&self,
platform_routing: Option<PlatformRouting>,
summoner_id: String,
) -> ApiResult<Vec<ChampionMasteryDto>> {
let routing = platform_routing.unwrap_or(self.configuration.default_platform);
self.make_request(
format!("/lol/champion-mastery/v4/champion-masteries/by-summoner/{summoner_id}"),
routing,
reqwest::Method::GET,
HashMap::new(),
HashMap::new(),
None::<()>,
).await
}
pub async fn champion_mastery_by_summoner_id_champion_id(
&self,
platform_routing: Option<PlatformRouting>,
summoner_id: String,
champion_id: i64,
) -> ApiResult<ChampionMasteryDto> {
let routing = platform_routing.unwrap_or(self.configuration.default_platform);
self.make_request(
format!("/lol/champion-mastery/v4/champion-masteries/by-puuid/{summoner_id}/by-champion/{champion_id}"),
routing,
reqwest::Method::GET,
HashMap::new(),
HashMap::new(),
None::<()>,
).await
}
pub async fn champion_mastery_by_summoner_id_top(
&self,
platform_routing: Option<PlatformRouting>,
summoner_id: String,
count: Option<u16>,
) -> ApiResult<Vec<ChampionMasteryDto>> {
let routing = platform_routing.unwrap_or(self.configuration.default_platform);
let count = count.unwrap_or(3);
self.make_request(
format!("/lol/champion-mastery/v4/champion-masteries/by-puuid/{summoner_id}/top?count={count}"),
routing,
reqwest::Method::GET,
HashMap::new(),
HashMap::new(),
None::<()>,
).await
}
pub async fn champion_mastery_scores_by_puuid(
&self,
platform_routing: Option<PlatformRouting>,
puuid: String,
) -> ApiResult<i32> {
let routing = platform_routing.unwrap_or(self.configuration.default_platform);
self.make_request(
format!("/lol/champion-mastery/v4/scores/by-puuid/{puuid}"),
routing,
reqwest::Method::GET,
HashMap::new(),
HashMap::new(),
None::<()>,
).await
}
pub async fn champion_mastery_scores_by_summoner_id(
&self,
platform_routing: Option<PlatformRouting>,
summoner_id: String,
) -> ApiResult<i32> {
let routing = platform_routing.unwrap_or(self.configuration.default_platform);
self.make_request(
format!("/lol/champion-mastery/v4/scores/by-summoner/{summoner_id}"),
routing,
reqwest::Method::GET,
HashMap::new(),
HashMap::new(),
None::<()>,
).await
}
}
#[cfg(test)]
mod tests {
#[tokio::test]
async fn test_champion_mastery_by_puuid() {
let (client, test_vars) = crate::tests::setup();
let champions = client.champion_mastery_by_puuid(None, test_vars.test_puuid.clone())
.await.unwrap();
let champion = champions.first().unwrap();
assert_eq!(champion.puuid, Some(test_vars.test_puuid));
assert_eq!(champion.champion_id, test_vars.test_champion_id);
assert!(champion.last_play_time.ge(&1701849021000));
assert!(champion.champion_points.ge(&991726));
}
#[tokio::test]
async fn test_champion_mastery_by_puuid_champion_id() {
let (client, test_vars) = crate::tests::setup();
let champion = client.champion_mastery_by_puuid_champion_id(
None, test_vars.test_puuid.clone(), test_vars.test_champion_id
).await.unwrap();
assert_eq!(champion.puuid, Some(test_vars.test_puuid));
assert_eq!(champion.champion_id, test_vars.test_champion_id);
assert!(champion.last_play_time.ge(&1701849021000));
assert!(champion.champion_points.ge(&991726));
}
#[tokio::test]
async fn test_champion_mastery_by_puuid_top() {
let (client, test_vars) = crate::tests::setup();
let champions = client.champion_mastery_by_puuid_top(
None, test_vars.test_puuid.clone(), None
).await.unwrap();
let champion = champions.first().unwrap();
assert_eq!(champion.puuid, Some(test_vars.test_puuid));
assert_eq!(champions.len(), 3);
assert_eq!(champion.champion_id, test_vars.test_champion_id);
assert!(champion.last_play_time.ge(&1701849021000));
assert!(champion.champion_points.ge(&991726));
}
#[tokio::test]
async fn test_champion_mastery_by_summoner_id_top() {
let (client, test_vars) = crate::tests::setup();
let champions = client.champion_mastery_by_summoner_id_top(
None, test_vars.test_puuid.clone(), None
).await.unwrap();
let champion = champions.first().unwrap();
assert_eq!(champion.puuid, Some(test_vars.test_puuid));
assert_eq!(champions.len(), 3);
assert_eq!(champion.champion_id, test_vars.test_champion_id);
assert!(champion.last_play_time.ge(&1701849021000));
assert!(champion.champion_points.ge(&991726));
}
#[tokio::test]
async fn test_champion_mastery_score_by_puuid() {
let (client, test_vars) = crate::tests::setup();
let total = client.champion_mastery_scores_by_puuid(None, test_vars.test_puuid)
.await.unwrap();
assert!(total.ge(&550))
}
}