From e05d67a598d4b20f0c9ad31cad7420bd964c048b Mon Sep 17 00:00:00 2001 From: trivernis Date: Sun, 16 May 2021 18:35:06 +0200 Subject: [PATCH] Add endpoint to get information for an artist Signed-off-by: trivernis --- src/client.rs | 20 +++++++++++++++++--- src/models.rs | 5 +++-- src/tests/test_client.rs | 8 ++++++++ 3 files changed, 28 insertions(+), 5 deletions(-) diff --git a/src/client.rs b/src/client.rs index cc11e22..ff847b7 100644 --- a/src/client.rs +++ b/src/client.rs @@ -1,5 +1,5 @@ use crate::error::ApiResult; -use crate::models::{Anime, SearchResponse}; +use crate::models::{Anime, Artist, SearchResponse}; use reqwest::Response; use serde::Serialize; use std::collections::HashMap; @@ -68,12 +68,12 @@ impl AnimeThemesClient { Ok(response.remove("search").unwrap()) } - /// Returns an anime by a given slug title + /// Returns an anime by a given slug string pub async fn anime(&self, slug: &str, include: &[&str]) -> ApiResult { let mut response: HashMap = self .api_get( format!("/anime/{}", slug).as_str(), - &[("include", include.join(",").as_str())], + &[("include", include.join(","))], ) .await? .json() @@ -82,6 +82,20 @@ impl AnimeThemesClient { Ok(response.remove("anime").unwrap()) } + /// Returns an artist by a given slug string + pub async fn artist(&self, slug: &str, include: &[&str]) -> ApiResult { + let mut response: HashMap = self + .api_get( + format!("/artist/{}", slug).as_str(), + &[("include", include.join(","))], + ) + .await? + .json() + .await?; + + Ok(response.remove("artist").unwrap()) + } + /// Posts a get request to the API endpoint async fn api_get(&self, path: &str, query: &T) -> ApiResult { let response = self diff --git a/src/models.rs b/src/models.rs index b07a8fd..7fb8cbe 100644 --- a/src/models.rs +++ b/src/models.rs @@ -71,9 +71,10 @@ pub struct Artist { #[serde(flatten)] pub meta: EntryMetadata, pub name: String, - pub slog: String, + pub slug: String, #[serde(alias = "as")] - pub as_character: String, + pub as_character: Option, + pub songs: Option>, } #[derive(Debug, Clone, Deserialize)] diff --git a/src/tests/test_client.rs b/src/tests/test_client.rs index f41f988..6262d49 100644 --- a/src/tests/test_client.rs +++ b/src/tests/test_client.rs @@ -24,3 +24,11 @@ async fn it_returns_anime_by_slug() { assert!(result.themes.is_some()); } + +#[tokio::test] +async fn it_returns_artists_by_slug() { + let client = AnimeThemesClient::default(); + let result = client.artist("lisa", &["songs"]).await.unwrap(); + + assert!(result.songs.is_some()); +}