use super::Endpoint;
use crate::{data_types::SortOrder, Error};
pub struct ArtistReleases;
#[derive(Debug, Clone, Default)]
pub struct ArtistReleasesParams {
pub artist_id: isize,
pub sort: Option<String>,
pub sort_order: Option<SortOrder>,
}
impl Endpoint<'_> for ArtistReleases {
type Parameters = ArtistReleasesParams;
type ReturnType = serde_json::Value;
fn build_url(
base: &reqwest::Url,
params: Self::Parameters,
) -> Result<reqwest::Url, crate::Error> {
let mut out = base
.join(&format!("/artists/{}/releases", params.artist_id))
.map_err(|_| Error::UrlError)?;
let mut pairs = Vec::with_capacity(
usize::from(params.sort.is_some()) + usize::from(params.sort_order.is_some()),
);
if let Some(sort) = params.sort.as_deref() {
pairs.push(("sort", sort));
}
if let Some(sort_order) = params.sort_order.as_ref() {
pairs.push(("sort_order", sort_order.as_ref()));
}
out.query_pairs_mut().extend_pairs(pairs);
Ok(out)
}
}
#[cfg(test)]
pub mod tests {
use super::*;
use crate::prelude::*;
#[test]
fn basic() {
let artist_id = 3946211;
let params = ArtistReleasesParams {
artist_id,
..Default::default()
};
let client = Client::default();
let data = client.get::<ArtistReleases>(params).unwrap();
dbg![data];
}
}