diff --git a/src/client.rs b/src/client.rs index ff847b7..6386070 100644 --- a/src/client.rs +++ b/src/client.rs @@ -1,5 +1,5 @@ use crate::error::ApiResult; -use crate::models::{Anime, Artist, SearchResponse}; +use crate::models::{Anime, Artist, SearchResponse, ThemeEntry}; use reqwest::Response; use serde::Serialize; use std::collections::HashMap; @@ -96,7 +96,21 @@ impl AnimeThemesClient { Ok(response.remove("artist").unwrap()) } - /// Posts a get request to the API endpoint + /// Returns an entry by a given id + pub async fn entry(&self, id: u32, include: &[&str]) -> ApiResult { + let mut response: HashMap = self + .api_get( + format!("/entry/{}", id).as_str(), + &[("include", include.join(","))], + ) + .await? + .json() + .await?; + + Ok(response.remove("entry").unwrap()) + } + + /// Starts a get request to the API endpoint async fn api_get(&self, path: &str, query: &T) -> ApiResult { let response = self .client diff --git a/src/tests/test_client.rs b/src/tests/test_client.rs index 6262d49..be1f43e 100644 --- a/src/tests/test_client.rs +++ b/src/tests/test_client.rs @@ -32,3 +32,11 @@ async fn it_returns_artists_by_slug() { assert!(result.songs.is_some()); } + +#[tokio::test] +async fn it_returns_entries_by_id() { + let client = AnimeThemesClient::default(); + let result = client.entry(11948, &["videos"]).await.unwrap(); + + assert!(result.videos.is_some()) +}