use polyoxide_core::{HttpClient, QueryBuilder, Request};
use crate::{
error::DataApiError,
types::{RankingEntry, RankingWindow},
};
#[derive(Clone)]
pub struct RankingsApi {
pub(crate) http_client: HttpClient,
}
impl RankingsApi {
pub fn volume(&self) -> RankingRequest {
RankingRequest {
request: Request::new(self.http_client.clone(), "/volume"),
}
}
pub fn profit(&self) -> RankingRequest {
RankingRequest {
request: Request::new(self.http_client.clone(), "/profit"),
}
}
}
pub struct RankingRequest {
request: Request<Vec<RankingEntry>, DataApiError>,
}
impl RankingRequest {
pub fn window(mut self, window: RankingWindow) -> Self {
self.request = self.request.query("window", window);
self
}
pub fn limit(mut self, limit: u32) -> Self {
self.request = self.request.query("limit", limit);
self
}
pub async fn send(self) -> Result<Vec<RankingEntry>, DataApiError> {
self.request.send().await
}
}