Add endpoint to get information for a song

Signed-off-by: trivernis <trivernis@protonmail.com>
pull/1/head
trivernis 3 years ago
parent 630cde27e5
commit 7725daa2bb
Signed by: Trivernis
GPG Key ID: DFFFCC2C7A02DB45

@ -1,6 +1,6 @@
use crate::error::ApiResult;
use crate::models::{
Anime, AnimeSynonym, Artist, Image, Resource, SearchResponse, Series, ThemeEntry,
Anime, AnimeSynonym, Artist, Image, Resource, SearchResponse, Series, Song, ThemeEntry,
};
use reqwest::Response;
use serde::de::DeserializeOwned;
@ -102,6 +102,11 @@ impl AnimeThemesClient {
self.entry_by_id_with_include("series", slug, include).await
}
/// Returns a song by id
pub async fn song(&self, id: u32, include: &[&str]) -> ApiResult<Song> {
self.entry_by_id_with_include("song", id, include).await
}
/// Returns a synonym by id
pub async fn synonym(&self, id: u32, include: &[&str]) -> ApiResult<AnimeSynonym> {
self.entry_by_id_with_include("synonym", id, include).await

@ -64,7 +64,7 @@ pub struct Song {
pub meta: EntryMetadata,
pub title: String,
pub artists: Option<Vec<Artist>>,
pub entries: Option<Vec<ThemeEntry>>,
pub themes: Option<Vec<Theme>>,
}
#[derive(Debug, Clone, Deserialize)]

@ -69,9 +69,17 @@ async fn it_returns_series_by_slug() {
}
#[tokio::test]
async fn it_returns_synonyms_b_id() {
async fn it_returns_synonyms_by_id() {
let client = AnimeThemesClient::default();
let result = client.synonym(2462, &["anime"]).await.unwrap();
assert!(result.anime.is_some())
}
#[tokio::test]
async fn it_returns_songs_by_id() {
let client = AnimeThemesClient::default();
let result = client.song(8188, &["themes"]).await.unwrap();
assert!(result.themes.is_some())
}

Loading…
Cancel
Save