use serde_json::json;
use super::Query;
use crate::common::{BrowseParams, ChannelID, YoutubeID};
use std::borrow::Cow;
pub struct GetArtistQuery<'a> {
channel_id: ChannelID<'a>,
}
#[derive(Debug)]
pub struct GetArtistAlbumsQuery<'a> {
channel_id: ChannelID<'a>,
pub params: BrowseParams<'a>,
}
impl<'a> GetArtistQuery<'a> {
pub fn new(channel_id: ChannelID<'a>) -> GetArtistQuery<'a> {
GetArtistQuery { channel_id }
}
}
impl<'a> GetArtistAlbumsQuery<'a> {
pub fn new(channel_id: ChannelID<'a>, params: BrowseParams<'a>) -> GetArtistAlbumsQuery<'a> {
GetArtistAlbumsQuery { channel_id, params }
}
}
impl<'a> Query for GetArtistQuery<'a> {
fn header(&self) -> serde_json::Map<String, serde_json::Value> {
let value = self.channel_id.get_raw().replacen("MPLA", "", 1);
let serde_json::Value::Object(map) = json!({
"browseId" : value,
}) else {
unreachable!()
};
map
}
fn path(&self) -> &str {
"browse"
}
fn params(&self) -> Option<Cow<str>> {
None
}
}
impl<'a> Query for GetArtistAlbumsQuery<'a> {
fn header(&self) -> serde_json::Map<String, serde_json::Value> {
let value = self.channel_id.get_raw().replacen("MPLA", "", 1);
let serde_json::Value::Object(map) = json!({
"browseId" : value,
}) else {
unreachable!()
};
map
}
fn path(&self) -> &str {
"browse"
}
fn params(&self) -> Option<Cow<str>> {
Some(self.params.get_raw().into())
}
}