1use std::collections::HashMap;
2
3use chrono::{DateTime, Utc};
4use serde::{Deserialize, Serialize};
5
6#[derive(Debug, Clone, Serialize, Deserialize)]
8#[serde(rename_all(deserialize = "camelCase"))]
9pub struct Market {
10 pub id: String,
11 pub condition_id: String,
12 pub question_id: Option<String>,
13 pub slug: Option<String>,
14 #[serde(default)]
15 pub tokens: Vec<MarketToken>,
16 pub rewards: Option<HashMap<String, serde_json::Value>>,
17 pub minimum_order_size: Option<String>,
18 pub minimum_tick_size: Option<String>,
19 pub description: String,
20 pub category: Option<String>,
21 pub end_date_iso: Option<String>,
22 pub start_date_iso: Option<String>,
23 pub question: String,
24 pub min_incentive_size: Option<String>,
25 pub max_incentive_spread: Option<String>,
26 pub submitted_by: Option<String>,
27 pub volume_24hr: Option<f64>,
28 pub volume_1wk: Option<f64>,
29 pub volume_1mo: Option<f64>,
30 pub volume_1yr: Option<f64>,
31 pub liquidity: Option<String>,
32 #[serde(default)]
33 pub tags: Vec<Tag>,
34 pub neg_risk: Option<bool>,
35 pub neg_risk_market_id: Option<String>,
36 pub neg_risk_request_id: Option<String>,
37 pub comment_count: Option<i64>,
39 pub twitter_card_image: Option<String>,
40 pub resolution_source: Option<String>,
41 pub amm_type: Option<String>,
42 pub sponsor_name: Option<String>,
43 pub sponsor_image: Option<String>,
44 pub x_axis_value: Option<String>,
45 pub y_axis_value: Option<String>,
46 pub denomation_token: Option<String>,
47 pub fee: Option<String>,
48 pub image: Option<String>,
49 pub icon: Option<String>,
50 pub lower_bound: Option<String>,
51 pub upper_bound: Option<String>,
52 pub outcomes: Option<String>,
53 pub outcome_prices: Option<String>,
54 pub volume: Option<String>,
55 pub active: Option<bool>,
56 pub market_type: Option<String>,
57 pub format_type: Option<String>,
58 pub lower_bound_date: Option<String>,
59 pub upper_bound_date: Option<String>,
60 pub closed: Option<bool>,
61 pub market_maker_address: String,
62 pub created_by: Option<i64>,
63 pub updated_by: Option<i64>,
64 pub created_at: Option<String>,
65 pub updated_at: Option<String>,
66 pub closed_time: Option<String>,
67 pub wide_format: Option<bool>,
68 pub new: Option<bool>,
69 pub mailchimp_tag: Option<String>,
70 pub featured: Option<bool>,
71 pub archived: Option<bool>,
72 pub resolved_by: Option<String>,
73 pub restricted: Option<bool>,
74 pub market_group: Option<i64>,
75 pub group_item_title: Option<String>,
76 pub group_item_threshold: Option<String>,
77 pub uma_end_date: Option<String>,
78 pub uma_resolution_status: Option<String>,
79 pub uma_end_date_iso: Option<String>,
80 pub uma_resolution_statuses: Option<String>,
81 pub enable_order_book: Option<bool>,
82 pub order_price_min_tick_size: Option<f64>,
83 pub order_min_size: Option<f64>,
84 pub curation_order: Option<i64>,
85 pub volume_num: Option<f64>,
86 pub liquidity_num: Option<f64>,
87 pub has_review_dates: Option<bool>,
88 pub ready_for_cron: Option<bool>,
89 pub comments_enabled: Option<bool>,
90 pub game_start_time: Option<String>,
91 pub seconds_delay: Option<i64>,
92 pub clob_token_ids: Option<String>,
93 pub disqus_thread: Option<String>,
94 pub short_outcomes: Option<String>,
95 pub team_aid: Option<String>,
96 pub team_bid: Option<String>,
97 pub uma_bond: Option<String>,
98 pub uma_reward: Option<String>,
99 pub fpmm_live: Option<bool>,
100 pub volume_24hr_amm: Option<f64>,
101 pub volume_1wk_amm: Option<f64>,
102 pub volume_1mo_amm: Option<f64>,
103 pub volume_1yr_amm: Option<f64>,
104 pub volume_24hr_clob: Option<f64>,
105 pub volume_1wk_clob: Option<f64>,
106 pub volume_1mo_clob: Option<f64>,
107 pub volume_1yr_clob: Option<f64>,
108 pub volume_amm: Option<f64>,
109 pub volume_clob: Option<f64>,
110 pub liquidity_amm: Option<f64>,
111 pub liquidity_clob: Option<f64>,
112 pub maker_base_fee: Option<i64>,
113 pub taker_base_fee: Option<i64>,
114 pub custom_liveness: Option<i64>,
115 pub accepting_orders: Option<bool>,
116 pub notifications_enabled: Option<bool>,
117 pub score: Option<i64>,
118 pub creator: Option<String>,
119 pub ready: Option<bool>,
120 pub funded: Option<bool>,
121 pub past_slugs: Option<String>,
122 pub ready_timestamp: Option<String>,
123 pub funded_timestamp: Option<String>,
124 pub accepting_orders_timestamp: Option<String>,
125 pub competitive: Option<f64>,
126 pub rewards_min_size: Option<f64>,
127 pub rewards_max_spreads: Option<f64>,
128 pub spread: Option<f64>,
129 pub automatically_resolved: Option<bool>,
130 pub automatically_active: Option<bool>,
131 pub one_day_price_change: Option<f64>,
132 pub one_hour_price_change: Option<f64>,
133 pub one_week_price_change: Option<f64>,
134 pub one_month_price_change: Option<f64>,
135 pub one_year_price_change: Option<f64>,
136 pub last_trade_price: Option<f64>,
137 pub best_bid: Option<f64>,
138 pub best_ask: Option<f64>,
139 pub clear_book_on_start: Option<bool>,
140 pub chart_color: Option<String>,
141 pub series_color: Option<String>,
142 pub show_gmp_series: Option<bool>,
143 pub show_gmp_outcome: Option<bool>,
144 pub manual_activation: Option<bool>,
145 pub neg_risk_other: Option<bool>,
146 pub game_id: Option<String>,
147 pub group_item_range: Option<String>,
148 pub sports_market_type: Option<String>,
149 pub line: Option<f64>,
150 pub pending_deployment: Option<bool>,
151 pub deploying: Option<bool>,
152 pub deploying_timestamp: Option<String>,
153 pub schedule_deployment_timestamp: Option<String>,
154 pub rfq_enabled: Option<bool>,
155 pub event_start_time: Option<String>,
156}
157
158#[derive(Debug, Clone, Serialize, Deserialize)]
160#[serde(rename_all(deserialize = "camelCase"))]
161pub struct MarketToken {
162 pub token_id: String,
163 pub outcome: String,
164 pub price: Option<String>,
165 pub winner: Option<bool>,
166}
167
168#[derive(Debug, Clone, Serialize, Deserialize)]
169#[serde(rename_all(deserialize = "camelCase"))]
170pub struct Event {
171 pub id: String,
172 pub ticker: Option<String>,
173 pub slug: Option<String>,
174 pub title: Option<String>,
175 pub subtitle: Option<String>,
176 pub description: Option<String>,
177 pub resolution_source: Option<String>,
178 pub start_date: Option<String>,
179 pub creation_date: Option<String>,
180 pub end_date: Option<String>,
181 pub image: Option<String>,
182 pub icon: Option<String>,
183 pub start_date_iso: Option<String>,
184 pub end_date_iso: Option<String>,
185 pub active: Option<bool>,
186 pub closed: Option<bool>,
187 pub archived: Option<bool>,
188 pub new: Option<bool>,
189 pub featured: Option<bool>,
190 pub restricted: Option<bool>,
191 pub liquidity: Option<f64>,
192 pub open_interest: Option<f64>,
193 pub sort_by: Option<String>,
194 pub category: Option<String>,
195 pub subcategory: Option<String>,
196 pub is_template: Option<bool>,
197 pub template_variables: Option<String>,
198 pub published_at: Option<String>,
199 pub created_by: Option<String>,
200 pub updated_by: Option<String>,
201 pub created_at: Option<String>,
202 pub updated_at: Option<String>,
203 pub comments_enabled: Option<bool>,
204 pub competitive: Option<f64>,
205 #[serde(rename = "volume24h")]
206 pub volume_24hr: Option<f64>,
207 #[serde(rename = "volume1wk")]
208 pub volume_1wk: Option<f64>,
209 #[serde(rename = "volume1mo")]
210 pub volume_1mo: Option<f64>,
211 #[serde(rename = "volume1yr")]
212 pub volume_1yr: Option<f64>,
213 pub featured_image: Option<String>,
214 pub disqus_thread: Option<String>,
215 pub parent_event: Option<String>,
216 pub enable_order_book: Option<bool>,
217 pub liquidity_amm: Option<f64>,
218 pub liquidity_clob: Option<f64>,
219 pub neg_risk: Option<bool>,
220 pub neg_risk_market_id: Option<String>,
221 pub neg_risk_fee_bips: Option<i64>,
222 #[serde(default)]
223 pub sub_events: Vec<String>,
224 #[serde(default)]
225 pub markets: Vec<Market>,
226 #[serde(default)]
227 pub tags: Vec<Tag>,
228 #[serde(default)]
229 pub series: Vec<SeriesInfo>,
230 pub cyom: Option<bool>,
231 pub closed_time: Option<String>,
232 pub show_all_outcomes: Option<bool>,
233 pub show_market_images: Option<bool>,
234 pub automatically_resolved: Option<bool>,
235 pub enalbe_neg_risk: Option<bool>,
236 pub automatically_active: Option<bool>,
237 pub event_date: Option<String>,
238 pub start_time: Option<String>,
239 pub event_week: Option<i64>,
240 pub series_slug: Option<String>,
241 pub score: Option<String>,
242 pub elapsed: Option<String>,
243 pub period: Option<String>,
244 pub live: Option<bool>,
245 pub ended: Option<bool>,
246 pub finished_timestamp: Option<String>,
247 pub gmp_chart_mode: Option<String>,
248 pub tweet_count: Option<i64>,
249 pub featured_order: Option<i64>,
250 pub estimate_value: Option<bool>,
251 pub cant_estimate: Option<bool>,
252 pub spreads_main_line: Option<f64>,
253 pub totals_main_line: Option<f64>,
254 pub carousel_map: Option<String>,
255 pub pending_deployment: Option<bool>,
256 pub deploying: Option<bool>,
257 pub deploying_timestamp: Option<String>,
258 pub schedule_deployment_timestamp: Option<String>,
259 pub game_status: Option<String>,
260}
261
262#[derive(Debug, Clone, Serialize, Deserialize)]
264#[serde(rename_all(deserialize = "camelCase"))]
265pub struct SeriesInfo {
266 pub id: String,
267 pub slug: String,
268 pub title: String,
269}
270
271#[derive(Debug, Clone, Serialize, Deserialize)]
273#[serde(rename_all(deserialize = "camelCase"))]
274pub struct SeriesData {
275 pub id: String,
276 pub slug: String,
277 pub title: String,
278 pub description: Option<String>,
279 pub image: Option<String>,
280 pub icon: Option<String>,
281 pub active: bool,
282 pub closed: bool,
283 pub archived: bool,
284 #[serde(default)]
285 pub tags: Vec<String>,
286 pub volume: Option<f64>,
287 pub liquidity: Option<f64>,
288 #[serde(default)]
289 pub events: Vec<Event>,
290 pub competitive: Option<String>,
291}
292
293#[derive(Debug, Clone, Serialize, Deserialize)]
295#[serde(rename_all(deserialize = "camelCase"))]
296pub struct Tag {
297 pub id: String,
298 pub slug: String,
299 pub label: String,
300 pub force_show: Option<bool>,
301 pub published_at: Option<String>,
302 pub created_by: Option<u64>,
303 pub updated_by: Option<u64>,
304 pub created_at: Option<String>,
305 pub updated_at: Option<String>,
306 pub force_hide: Option<bool>,
307 pub is_carousel: Option<bool>,
308}
309
310#[derive(Debug, Clone, Serialize, Deserialize)]
312#[serde(rename_all(deserialize = "camelCase"))]
313pub struct SportMetadata {
314 pub id: u64,
315 pub sport: String,
316 pub image: Option<String>,
317 pub resolution: Option<String>,
318 pub ordering: Option<String>,
319 pub tags: Option<String>,
320 pub series: Option<String>,
321 pub created_at: Option<String>,
322}
323
324#[derive(Debug, Clone, Serialize, Deserialize)]
326#[serde(rename_all(deserialize = "camelCase"))]
327pub struct Team {
328 pub id: i64,
329 pub name: Option<String>,
330 pub league: Option<String>,
331 pub record: Option<String>,
332 pub logo: Option<String>,
333 pub abbreviation: Option<String>,
334 pub alias: Option<String>,
335 pub created_at: Option<DateTime<Utc>>,
336 pub updated_at: Option<DateTime<Utc>>,
337}
338
339#[derive(Debug, Clone, Serialize, Deserialize)]
341#[serde(rename_all(deserialize = "camelCase"))]
342pub struct Comment {
343 pub id: String,
344 pub body: String,
345 pub created_at: DateTime<Utc>,
346 pub updated_at: DateTime<Utc>,
347 pub deleted_at: Option<DateTime<Utc>>,
348 pub user: CommentUser,
349 pub market_id: Option<String>,
350 pub event_id: Option<String>,
351 pub series_id: Option<String>,
352 pub parent_id: Option<String>,
353 #[serde(default)]
354 pub reactions: Vec<CommentReaction>,
355 #[serde(default)]
356 pub positions: Vec<CommentPosition>,
357 pub like_count: u32,
358 pub dislike_count: u32,
359 pub reply_count: u32,
360}
361
362#[derive(Debug, Clone, Serialize, Deserialize)]
364#[serde(rename_all(deserialize = "camelCase"))]
365pub struct CommentUser {
366 pub id: String,
367 pub name: String,
368 pub avatar: Option<String>,
369}
370
371#[derive(Debug, Clone, Serialize, Deserialize)]
373#[serde(rename_all(deserialize = "camelCase"))]
374pub struct CommentReaction {
375 pub user_id: String,
376 pub reaction_type: String,
377}
378
379#[derive(Debug, Clone, Serialize, Deserialize)]
381#[serde(rename_all(deserialize = "camelCase"))]
382pub struct CommentPosition {
383 pub token_id: String,
384 pub outcome: String,
385 pub shares: String,
386}
387
388#[derive(Debug, Clone, Serialize, Deserialize)]
390#[serde(rename_all(deserialize = "camelCase"))]
391pub struct Cursor {
392 pub next_cursor: Option<String>,
393}
394
395#[derive(Debug, Clone, Serialize, Deserialize)]
397#[serde(rename_all(deserialize = "camelCase"))]
398pub struct PaginatedResponse<T> {
399 pub data: Vec<T>,
400 pub next_cursor: Option<String>,
401}