use crate::error::Error;
use crate::primitive::TrackType;
use crate::request::builder::MusicRequestBuilder;
use crate::request::paginated::paginate;
use crate::resource::Resource;
use crate::ApiClient;
use futures::Stream;
pub struct History;
impl History {
pub fn get<'a>() -> HistoryGetRequestBuilder<'a> {
HistoryGetRequestBuilder::default()
}
}
pub struct HistoryRequestBuilder;
pub type HistoryGetRequestBuilder<'a> = MusicRequestBuilder<'a, HistoryRequestBuilder>;
impl<'a> HistoryGetRequestBuilder<'a> {
pub async fn heavy_rotation(
mut self,
client: &ApiClient,
limit: usize,
offset: usize,
) -> impl Stream<Item = Result<Resource, Error>> {
let mut request_context = self.get_request_context_drain(client);
request_context
.query
.push((String::from("limit"), limit.to_string()));
paginate(
client.clone(),
String::from("/v1/me/history/heavy-rotation"),
request_context,
offset,
)
}
pub async fn recently_played(
mut self,
client: &ApiClient,
limit: usize,
offset: usize,
) -> impl Stream<Item = Result<Resource, Error>> {
let mut request_context = self.get_request_context_drain(client);
request_context
.query
.push((String::from("limit"), limit.to_string()));
paginate(
client.clone(),
String::from("/v1/me/recent/played"),
request_context,
offset,
)
}
pub async fn recently_played_tracks(
mut self,
client: &ApiClient,
tracks: &[TrackType],
limit: usize,
offset: usize,
) -> impl Stream<Item = Result<Resource, Error>> {
let mut request_context = self.get_request_context_drain(client);
request_context
.query
.push((String::from("limit"), limit.to_string()));
request_context.query.push((
String::from("types"),
tracks
.iter()
.map(|e| e.to_string())
.collect::<Vec<_>>()
.join(","),
));
paginate(
client.clone(),
String::from("/v1/me/recent/played/tracks"),
request_context,
offset,
)
}
pub async fn recently_played_stations(
mut self,
client: &ApiClient,
limit: usize,
offset: usize,
) -> impl Stream<Item = Result<Resource, Error>> {
let mut request_context = self.get_request_context_drain(client);
request_context
.query
.push((String::from("limit"), limit.to_string()));
paginate(
client.clone(),
String::from("/v1/me/recent/radio-stations"),
request_context,
offset,
)
}
pub async fn recently_added_to_library(
mut self,
client: &ApiClient,
limit: usize,
offset: usize,
) -> impl Stream<Item = Result<Resource, Error>> {
let mut request_context = self.get_request_context_drain(client);
request_context
.query
.push((String::from("limit"), limit.to_string()));
paginate(
client.clone(),
String::from("/v1/me/library/recently-added"),
request_context,
offset,
)
}
}