polyte_gamma/api/
events.rs

1use reqwest::Client;
2use url::Url;
3
4use crate::{
5    request::{QueryBuilder, Request},
6    types::Event,
7};
8
9/// Events namespace for event-related operations
10#[derive(Clone)]
11pub struct Events {
12    pub(crate) client: Client,
13    pub(crate) base_url: Url,
14}
15
16impl Events {
17    /// List events with optional filtering
18    pub fn list(&self) -> ListEvents {
19        ListEvents {
20            request: Request::new(
21                self.client.clone(),
22                self.base_url.clone(),
23                "/events".to_string(),
24            ),
25        }
26    }
27
28    /// Get an event by ID
29    pub fn get(&self, id: impl Into<String>) -> Request<Event> {
30        Request::new(
31            self.client.clone(),
32            self.base_url.clone(),
33            format!("/events/{}", urlencoding::encode(&id.into())),
34        )
35    }
36
37    /// Get an event by slug
38    pub fn get_by_slug(&self, slug: impl Into<String>) -> Request<Event> {
39        Request::new(
40            self.client.clone(),
41            self.base_url.clone(),
42            format!("/events/slug/{}", urlencoding::encode(&slug.into())),
43        )
44    }
45
46    /// Get related events by slug
47    pub fn get_related_by_slug(&self, slug: impl Into<String>) -> Request<Vec<Event>> {
48        Request::new(
49            self.client.clone(),
50            self.base_url.clone(),
51            format!("/events/slug/{}/related", urlencoding::encode(&slug.into())),
52        )
53    }
54}
55
56/// Request builder for listing events
57pub struct ListEvents {
58    request: Request<Vec<Event>>,
59}
60
61impl ListEvents {
62    /// Set maximum number of results (minimum: 0)
63    pub fn limit(mut self, limit: u32) -> Self {
64        self.request = self.request.query("limit", limit);
65        self
66    }
67
68    /// Set pagination offset (minimum: 0)
69    pub fn offset(mut self, offset: u32) -> Self {
70        self.request = self.request.query("offset", offset);
71        self
72    }
73
74    /// Set order fields (comma-separated list)
75    pub fn order(mut self, order: impl Into<String>) -> Self {
76        self.request = self.request.query("order", order.into());
77        self
78    }
79
80    /// Set sort direction
81    pub fn ascending(mut self, ascending: bool) -> Self {
82        self.request = self.request.query("ascending", ascending);
83        self
84    }
85
86    /// Filter by specific event IDs
87    pub fn id(mut self, ids: impl IntoIterator<Item = i64>) -> Self {
88        self.request = self.request.query_many("id", ids);
89        self
90    }
91
92    /// Filter by tag identifier
93    pub fn tag_id(mut self, tag_id: i64) -> Self {
94        self.request = self.request.query("tag_id", tag_id);
95        self
96    }
97
98    /// Exclude events with specified tag IDs
99    pub fn exclude_tag_id(mut self, tag_ids: impl IntoIterator<Item = i64>) -> Self {
100        self.request = self.request.query_many("exclude_tag_id", tag_ids);
101        self
102    }
103
104    /// Filter by event slugs
105    pub fn slug(mut self, slugs: impl IntoIterator<Item = impl ToString>) -> Self {
106        self.request = self.request.query_many("slug", slugs);
107        self
108    }
109
110    /// Filter by tag slug
111    pub fn tag_slug(mut self, slug: impl Into<String>) -> Self {
112        self.request = self.request.query("tag_slug", slug.into());
113        self
114    }
115
116    /// Include related tags in response
117    pub fn related_tags(mut self, include: bool) -> Self {
118        self.request = self.request.query("related_tags", include);
119        self
120    }
121
122    /// Filter active events only
123    pub fn active(mut self, active: bool) -> Self {
124        self.request = self.request.query("active", active);
125        self
126    }
127
128    /// Filter archived events
129    pub fn archived(mut self, archived: bool) -> Self {
130        self.request = self.request.query("archived", archived);
131        self
132    }
133
134    /// Filter featured events
135    pub fn featured(mut self, featured: bool) -> Self {
136        self.request = self.request.query("featured", featured);
137        self
138    }
139
140    /// Filter create-your-own-market events
141    pub fn cyom(mut self, cyom: bool) -> Self {
142        self.request = self.request.query("cyom", cyom);
143        self
144    }
145
146    /// Include chat data in response
147    pub fn include_chat(mut self, include: bool) -> Self {
148        self.request = self.request.query("include_chat", include);
149        self
150    }
151
152    /// Include template data
153    pub fn include_template(mut self, include: bool) -> Self {
154        self.request = self.request.query("include_template", include);
155        self
156    }
157
158    /// Filter by recurrence pattern
159    pub fn recurrence(mut self, recurrence: impl Into<String>) -> Self {
160        self.request = self.request.query("recurrence", recurrence.into());
161        self
162    }
163
164    /// Filter closed events
165    pub fn closed(mut self, closed: bool) -> Self {
166        self.request = self.request.query("closed", closed);
167        self
168    }
169
170    /// Set minimum liquidity threshold
171    pub fn liquidity_min(mut self, min: f64) -> Self {
172        self.request = self.request.query("liquidity_min", min);
173        self
174    }
175
176    /// Set maximum liquidity threshold
177    pub fn liquidity_max(mut self, max: f64) -> Self {
178        self.request = self.request.query("liquidity_max", max);
179        self
180    }
181
182    /// Set minimum trading volume
183    pub fn volume_min(mut self, min: f64) -> Self {
184        self.request = self.request.query("volume_min", min);
185        self
186    }
187
188    /// Set maximum trading volume
189    pub fn volume_max(mut self, max: f64) -> Self {
190        self.request = self.request.query("volume_max", max);
191        self
192    }
193
194    /// Set earliest start date (ISO 8601 format)
195    pub fn start_date_min(mut self, date: impl Into<String>) -> Self {
196        self.request = self.request.query("start_date_min", date.into());
197        self
198    }
199
200    /// Set latest start date (ISO 8601 format)
201    pub fn start_date_max(mut self, date: impl Into<String>) -> Self {
202        self.request = self.request.query("start_date_max", date.into());
203        self
204    }
205
206    /// Set earliest end date (ISO 8601 format)
207    pub fn end_date_min(mut self, date: impl Into<String>) -> Self {
208        self.request = self.request.query("end_date_min", date.into());
209        self
210    }
211
212    /// Set latest end date (ISO 8601 format)
213    pub fn end_date_max(mut self, date: impl Into<String>) -> Self {
214        self.request = self.request.query("end_date_max", date.into());
215        self
216    }
217
218    /// Execute the request
219    pub async fn send(self) -> crate::error::Result<Vec<Event>> {
220        self.request.send().await
221    }
222}