use crate::{
api::service::QobuzApiService,
errors::QobuzApiError::{self},
models::{Artist, ReleasesList, SearchResult},
};
#[derive(Default, Debug)]
pub struct ArtistReleaseListParams {
pub with_auth: Option<bool>,
pub release_type: Option<String>,
pub sort: Option<String>,
pub order: Option<String>,
pub track_size: Option<i32>,
pub limit: Option<i32>,
pub offset: Option<i32>,
}
impl QobuzApiService {
pub async fn get_artist(
&self,
artist_id: &str,
with_auth: Option<bool>,
extra: Option<&str>,
sort: Option<&str>,
limit: Option<i32>,
offset: Option<i32>,
) -> Result<Artist, QobuzApiError> {
let mut params = vec![("artist_id".to_string(), artist_id.to_string())];
if let Some(extra_val) = extra {
params.push(("extra".to_string(), extra_val.to_string()));
}
if let Some(sort_val) = sort {
params.push(("sort".to_string(), sort_val.to_string()));
}
params.push(("limit".to_string(), limit.unwrap_or(50).to_string()));
params.push(("offset".to_string(), offset.unwrap_or(0).to_string()));
let _use_auth = with_auth.unwrap_or(false);
self.get("/artist/get", ¶ms).await
}
pub async fn get_release_list(
&self,
artist_id: &str,
params: ArtistReleaseListParams,
) -> Result<ReleasesList, QobuzApiError> {
let mut query_params = vec![("artist_id".to_string(), artist_id.to_string())];
if let Some(release_type_val) = params.release_type {
query_params.push(("release_type".to_string(), release_type_val));
}
if let Some(sort_val) = params.sort {
query_params.push(("sort".to_string(), sort_val));
}
if let Some(order_val) = params.order {
query_params.push(("order".to_string(), order_val));
}
query_params.push((
"track_size".to_string(),
params.track_size.unwrap_or(10).to_string(),
));
query_params.push(("limit".to_string(), params.limit.unwrap_or(50).to_string()));
query_params.push(("offset".to_string(), params.offset.unwrap_or(0).to_string()));
let _use_auth = params.with_auth.unwrap_or(false);
self.get("/artist/getReleasesList", &query_params).await
}
pub async fn search_artists(
&self,
query: &str,
limit: Option<i32>,
offset: Option<i32>,
with_auth: Option<bool>,
) -> Result<SearchResult, QobuzApiError> {
let params = vec![
("query".to_string(), query.to_string()),
("limit".to_string(), limit.unwrap_or(50).to_string()),
("offset".to_string(), offset.unwrap_or(0).to_string()),
];
let _use_auth = with_auth.unwrap_or(false);
self.get("/artist/search", ¶ms).await
}
}