use polyte_core::{QueryBuilder, Request};
use reqwest::Client;
use url::Url;
use crate::{error::GammaError, types::SeriesData};
#[derive(Clone)]
pub struct Series {
pub(crate) client: Client,
pub(crate) base_url: Url,
}
impl Series {
pub fn list(&self) -> ListSeries {
ListSeries {
request: Request::new(self.client.clone(), self.base_url.clone(), "/series"),
}
}
pub fn get(&self, id: impl Into<String>) -> Request<SeriesData, GammaError> {
Request::new(
self.client.clone(),
self.base_url.clone(),
format!("/series/{}", urlencoding::encode(&id.into())),
)
}
}
pub struct ListSeries {
request: Request<Vec<SeriesData>, GammaError>,
}
impl ListSeries {
pub fn limit(mut self, limit: u32) -> Self {
self.request = self.request.query("limit", limit);
self
}
pub fn offset(mut self, offset: u32) -> Self {
self.request = self.request.query("offset", offset);
self
}
pub fn ascending(mut self, ascending: bool) -> Self {
self.request = self.request.query("ascending", ascending);
self
}
pub fn closed(mut self, closed: bool) -> Self {
self.request = self.request.query("closed", closed);
self
}
pub async fn send(self) -> crate::error::Result<Vec<SeriesData>> {
self.request.send().await
}
}