polyte_gamma/api/
series.rs

1use polyte_core::{QueryBuilder, Request};
2use reqwest::Client;
3use url::Url;
4
5use crate::{error::GammaError, types::SeriesData};
6
7/// Series namespace for series-related operations
8#[derive(Clone)]
9pub struct Series {
10    pub(crate) client: Client,
11    pub(crate) base_url: Url,
12}
13
14impl Series {
15    /// List series with optional filtering
16    pub fn list(&self) -> ListSeries {
17        ListSeries {
18            request: Request::new(self.client.clone(), self.base_url.clone(), "/series"),
19        }
20    }
21
22    /// Get a series by ID
23    pub fn get(&self, id: impl Into<String>) -> Request<SeriesData, GammaError> {
24        Request::new(
25            self.client.clone(),
26            self.base_url.clone(),
27            format!("/series/{}", urlencoding::encode(&id.into())),
28        )
29    }
30}
31
32/// Request builder for listing series
33pub struct ListSeries {
34    request: Request<Vec<SeriesData>, GammaError>,
35}
36
37impl ListSeries {
38    /// Limit the number of results
39    pub fn limit(mut self, limit: u32) -> Self {
40        self.request = self.request.query("limit", limit);
41        self
42    }
43
44    /// Offset the results
45    pub fn offset(mut self, offset: u32) -> Self {
46        self.request = self.request.query("offset", offset);
47        self
48    }
49
50    /// Sort in ascending order
51    pub fn ascending(mut self, ascending: bool) -> Self {
52        self.request = self.request.query("ascending", ascending);
53        self
54    }
55
56    /// Filter by closed status
57    pub fn closed(mut self, closed: bool) -> Self {
58        self.request = self.request.query("closed", closed);
59        self
60    }
61
62    /// Execute the request
63    pub async fn send(self) -> crate::error::Result<Vec<SeriesData>> {
64        self.request.send().await
65    }
66}