use pandora_api_derive::PandoraJsonRequest;
use serde::{Deserialize, Serialize};
use crate::errors::Error;
use crate::json::{PandoraJsonApiRequest, PandoraSession, Timestamp};
#[derive(Debug, Clone, Serialize, PandoraJsonRequest)]
#[pandora_request(encrypted = true)]
#[serde(rename_all = "camelCase")]
pub struct AddArtistBookmark {
pub track_token: String,
}
impl<TS: ToString> From<&TS> for AddArtistBookmark {
fn from(track_token: &TS) -> Self {
Self {
track_token: track_token.to_string(),
}
}
}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct AddArtistBookmarkResponse {
pub artist_name: String,
pub date_created: Timestamp,
pub bookmark_token: String,
pub art_url: String,
pub music_token: String,
}
pub async fn add_artist_bookmark(
session: &mut PandoraSession,
track_token: &str,
) -> Result<AddArtistBookmarkResponse, Error> {
AddArtistBookmark::from(&track_token)
.response(session)
.await
}
#[derive(Debug, Clone, Serialize, PandoraJsonRequest)]
#[pandora_request(encrypted = true)]
#[serde(rename_all = "camelCase")]
pub struct AddSongBookmark {
pub track_token: String,
}
impl<TS: ToString> From<&TS> for AddSongBookmark {
fn from(track_token: &TS) -> Self {
Self {
track_token: track_token.to_string(),
}
}
}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct AddSongBookmarkResponse {
pub sample_gain: String,
pub music_token: String,
pub bookmark_token: String,
pub sample_url: String,
pub album_name: String,
pub song_name: String,
pub art_url: String,
pub date_created: Timestamp,
pub artist_name: String,
}
pub async fn add_song_bookmark(
session: &mut PandoraSession,
track_token: &str,
) -> Result<AddSongBookmarkResponse, Error> {
AddSongBookmark::from(&track_token).response(session).await
}
#[derive(Debug, Clone, Serialize, PandoraJsonRequest)]
#[pandora_request(encrypted = true)]
#[serde(rename_all = "camelCase")]
pub struct DeleteArtistBookmark {
pub bookmark_token: String,
}
impl<TS: ToString> From<&TS> for DeleteArtistBookmark {
fn from(bookmark_token: &TS) -> Self {
Self {
bookmark_token: bookmark_token.to_string(),
}
}
}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct DeleteArtistBookmarkResponse {}
pub async fn delete_artist_bookmark(
session: &mut PandoraSession,
bookmark_token: &str,
) -> Result<DeleteArtistBookmarkResponse, Error> {
DeleteArtistBookmark::from(&bookmark_token)
.response(session)
.await
}
#[derive(Debug, Clone, Serialize, PandoraJsonRequest)]
#[pandora_request(encrypted = true)]
#[serde(rename_all = "camelCase")]
pub struct DeleteSongBookmark {
pub bookmark_token: String,
}
impl<TS: ToString> From<&TS> for DeleteSongBookmark {
fn from(bookmark_token: &TS) -> Self {
Self {
bookmark_token: bookmark_token.to_string(),
}
}
}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct DeleteSongBookmarkResponse {}
pub async fn delete_song_bookmark(
session: &mut PandoraSession,
bookmark_token: &str,
) -> Result<DeleteSongBookmarkResponse, Error> {
DeleteSongBookmark::from(&bookmark_token)
.response(session)
.await
}
#[cfg(test)]
mod tests {
use super::*;
use crate::json::{
station::get_playlist, tests::session_login, user::get_bookmarks, user::get_station_list,
Partner,
};
}