use crate::{
client::{PokeApiClient, pagination::page_query},
error::Result,
models::{common::{NamedApiResource, Page}, pokemon::Pokemon},
types::{pagination::PageRequest, identifiers::{PokemonName, PokemonRef}},
};
impl PokeApiClient {
pub async fn pokemon_by_id(&self, id: u32) -> Result<Pokemon> {
let path = format!("pokemon/{id}");
self.get_json(&path, None).await
}
pub async fn pokemon_by_name(&self, name: PokemonName<'_>) -> Result<Pokemon> {
let path = format!("pokemon/{}", name.as_str());
self.get_json(&path, None).await
}
pub async fn pokemon(&self, pokemon: PokemonRef<'_>) -> Result<Pokemon> {
match pokemon {
PokemonRef::Id(id) => self.pokemon_by_id(id).await,
PokemonRef::Name(name) => self.pokemon_by_name(name).await,
}
}
pub async fn pokemon_list(&self, page: PageRequest) -> Result<Page<NamedApiResource>> {
let q = page_query(page);
self.get_json("pokemon", Some(q)).await
}
}