polyte_gamma/api/
markets.rs1use reqwest::Client;
2use url::Url;
3
4use crate::{
5 request::{QueryBuilder, Request},
6 types::Market,
7};
8
9#[derive(Clone)]
11pub struct Markets {
12 pub(crate) client: Client,
13 pub(crate) base_url: Url,
14}
15
16impl Markets {
17 pub fn get(&self, id: impl Into<String>) -> Request<Market> {
19 Request::new(
20 self.client.clone(),
21 self.base_url.clone(),
22 format!("/markets/{}", urlencoding::encode(&id.into())),
23 )
24 }
25
26 pub fn get_by_slug(&self, slug: impl Into<String>) -> Request<Market> {
28 Request::new(
29 self.client.clone(),
30 self.base_url.clone(),
31 format!("/markets/slug/{}", urlencoding::encode(&slug.into())),
32 )
33 }
34
35 pub fn list(&self) -> ListMarkets {
37 ListMarkets {
38 request: Request::new(
39 self.client.clone(),
40 self.base_url.clone(),
41 "/markets".to_string(),
42 ),
43 }
44 }
45}
46
47pub struct ListMarkets {
49 request: Request<Vec<Market>>,
50}
51
52impl ListMarkets {
53 pub fn limit(mut self, limit: u32) -> Self {
55 self.request = self.request.query("limit", limit);
56 self
57 }
58
59 pub fn offset(mut self, offset: u32) -> Self {
61 self.request = self.request.query("offset", offset);
62 self
63 }
64
65 pub fn order(mut self, order: impl Into<String>) -> Self {
67 self.request = self.request.query("order", order.into());
68 self
69 }
70
71 pub fn ascending(mut self, ascending: bool) -> Self {
73 self.request = self.request.query("ascending", ascending);
74 self
75 }
76
77 pub fn id(mut self, ids: impl IntoIterator<Item = i64>) -> Self {
79 self.request = self.request.query_many("id", ids);
80 self
81 }
82
83 pub fn slug(mut self, slugs: impl IntoIterator<Item = impl ToString>) -> Self {
85 self.request = self.request.query_many("slug", slugs);
86 self
87 }
88
89 pub fn clob_token_ids(mut self, token_ids: impl IntoIterator<Item = impl ToString>) -> Self {
91 self.request = self.request.query_many("clob_token_ids", token_ids);
92 self
93 }
94
95 pub fn condition_ids(mut self, condition_ids: impl IntoIterator<Item = impl ToString>) -> Self {
97 self.request = self.request.query_many("condition_ids", condition_ids);
98 self
99 }
100
101 pub fn market_maker_address(
103 mut self,
104 addresses: impl IntoIterator<Item = impl ToString>,
105 ) -> Self {
106 self.request = self.request.query_many("market_maker_address", addresses);
107 self
108 }
109
110 pub fn liquidity_num_min(mut self, min: f64) -> Self {
112 self.request = self.request.query("liquidity_num_min", min);
113 self
114 }
115
116 pub fn liquidity_num_max(mut self, max: f64) -> Self {
118 self.request = self.request.query("liquidity_num_max", max);
119 self
120 }
121
122 pub fn volume_num_min(mut self, min: f64) -> Self {
124 self.request = self.request.query("volume_num_min", min);
125 self
126 }
127
128 pub fn volume_num_max(mut self, max: f64) -> Self {
130 self.request = self.request.query("volume_num_max", max);
131 self
132 }
133
134 pub fn start_date_min(mut self, date: impl Into<String>) -> Self {
136 self.request = self.request.query("start_date_min", date.into());
137 self
138 }
139
140 pub fn start_date_max(mut self, date: impl Into<String>) -> Self {
142 self.request = self.request.query("start_date_max", date.into());
143 self
144 }
145
146 pub fn end_date_min(mut self, date: impl Into<String>) -> Self {
148 self.request = self.request.query("end_date_min", date.into());
149 self
150 }
151
152 pub fn end_date_max(mut self, date: impl Into<String>) -> Self {
154 self.request = self.request.query("end_date_max", date.into());
155 self
156 }
157
158 pub fn tag_id(mut self, tag_id: i64) -> Self {
160 self.request = self.request.query("tag_id", tag_id);
161 self
162 }
163
164 pub fn related_tags(mut self, include: bool) -> Self {
166 self.request = self.request.query("related_tags", include);
167 self
168 }
169
170 pub fn cyom(mut self, cyom: bool) -> Self {
172 self.request = self.request.query("cyom", cyom);
173 self
174 }
175
176 pub fn uma_resolution_status(mut self, status: impl Into<String>) -> Self {
178 self.request = self.request.query("uma_resolution_status", status.into());
179 self
180 }
181
182 pub fn game_id(mut self, game_id: impl Into<String>) -> Self {
184 self.request = self.request.query("game_id", game_id.into());
185 self
186 }
187
188 pub fn sports_market_types(mut self, types: impl IntoIterator<Item = impl ToString>) -> Self {
190 self.request = self.request.query_many("sports_market_types", types);
191 self
192 }
193
194 pub fn rewards_min_size(mut self, min: f64) -> Self {
196 self.request = self.request.query("rewards_min_size", min);
197 self
198 }
199
200 pub fn question_ids(mut self, question_ids: impl IntoIterator<Item = impl ToString>) -> Self {
202 self.request = self.request.query_many("question_ids", question_ids);
203 self
204 }
205
206 pub fn include_tag(mut self, include: bool) -> Self {
208 self.request = self.request.query("include_tag", include);
209 self
210 }
211
212 pub fn closed(mut self, closed: bool) -> Self {
214 self.request = self.request.query("closed", closed);
215 self
216 }
217
218 pub fn active(mut self, active: bool) -> Self {
220 self.request = self.request.query("closed", !active);
221 self
222 }
223
224 pub fn archived(mut self, archived: bool) -> Self {
226 self.request = self.request.query("archived", archived);
227 self
228 }
229
230 pub async fn send(self) -> crate::error::Result<Vec<Market>> {
232 self.request.send().await
233 }
234}