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)]
170#[serde(rename_all(deserialize = "camelCase"))]
171pub struct Event {
172 pub id: String,
173 pub slug: String,
174 pub title: String,
175 pub description: Option<String>,
176 pub start_date_iso: Option<String>,
177 pub end_date_iso: Option<String>,
178 pub image: Option<String>,
179 pub icon: Option<String>,
180 pub active: bool,
181 pub closed: bool,
182 pub archived: bool,
183 pub new: Option<bool>,
184 pub featured: bool,
185 pub restricted: bool,
186 pub liquidity: Option<f64>,
187 pub volume: Option<f64>,
188 pub volume_24hr: Option<f64>,
189 pub comment_count: Option<i64>,
191 #[serde(default)]
192 pub markets: Vec<Market>,
193 pub cyom: Option<bool>,
194 pub competitive: Option<f64>,
195 #[serde(default)]
196 pub tags: Vec<Tag>,
197 #[serde(default)]
198 pub series: Vec<SeriesInfo>,
199}
200
201#[derive(Debug, Clone, Serialize, Deserialize)]
203#[serde(rename_all(deserialize = "camelCase"))]
204pub struct SeriesInfo {
205 pub id: String,
206 pub slug: String,
207 pub title: String,
208}
209
210#[derive(Debug, Clone, Serialize, Deserialize)]
212#[serde(rename_all(deserialize = "camelCase"))]
213pub struct SeriesData {
214 pub id: String,
215 pub slug: String,
216 pub title: String,
217 pub description: Option<String>,
218 pub image: Option<String>,
219 pub icon: Option<String>,
220 pub active: bool,
221 pub closed: bool,
222 pub archived: bool,
223 #[serde(default)]
224 pub tags: Vec<String>,
225 pub volume: Option<f64>,
226 pub liquidity: Option<f64>,
227 #[serde(default)]
228 pub events: Vec<Event>,
229 pub competitive: Option<String>,
230}
231
232#[derive(Debug, Clone, Serialize, Deserialize)]
234#[serde(rename_all(deserialize = "camelCase"))]
235pub struct Tag {
236 pub id: String,
237 pub slug: String,
238 pub label: String,
239 pub force_show: Option<bool>,
240 pub published_at: Option<String>,
241 pub created_by: Option<u64>,
242 pub updated_by: Option<u64>,
243 pub created_at: Option<String>,
244 pub updated_at: Option<String>,
245 pub force_hide: Option<bool>,
246 pub is_carousel: Option<bool>,
247}
248
249#[derive(Debug, Clone, Serialize, Deserialize)]
251#[serde(rename_all(deserialize = "camelCase"))]
252pub struct SportMetadata {
253 pub id: u64,
254 pub sport: String,
255 pub image: Option<String>,
256 pub resolution: Option<String>,
257 pub ordering: Option<String>,
258 pub tags: Option<String>,
259 pub series: Option<String>,
260 pub created_at: Option<String>,
261}
262
263#[derive(Debug, Clone, Serialize, Deserialize)]
265#[serde(rename_all(deserialize = "camelCase"))]
266pub struct Team {
267 pub id: i64,
268 pub name: Option<String>,
269 pub league: Option<String>,
270 pub record: Option<String>,
271 pub logo: Option<String>,
272 pub abbreviation: Option<String>,
273 pub alias: Option<String>,
274 pub created_at: Option<DateTime<Utc>>,
275 pub updated_at: Option<DateTime<Utc>>,
276}
277
278#[derive(Debug, Clone, Serialize, Deserialize)]
280#[serde(rename_all(deserialize = "camelCase"))]
281pub struct Comment {
282 pub id: String,
283 pub body: String,
284 pub created_at: DateTime<Utc>,
285 pub updated_at: DateTime<Utc>,
286 pub deleted_at: Option<DateTime<Utc>>,
287 pub user: CommentUser,
288 pub market_id: Option<String>,
289 pub event_id: Option<String>,
290 pub series_id: Option<String>,
291 pub parent_id: Option<String>,
292 #[serde(default)]
293 pub reactions: Vec<CommentReaction>,
294 #[serde(default)]
295 pub positions: Vec<CommentPosition>,
296 pub like_count: u32,
297 pub dislike_count: u32,
298 pub reply_count: u32,
299}
300
301#[derive(Debug, Clone, Serialize, Deserialize)]
303#[serde(rename_all(deserialize = "camelCase"))]
304pub struct CommentUser {
305 pub id: String,
306 pub name: String,
307 pub avatar: Option<String>,
308}
309
310#[derive(Debug, Clone, Serialize, Deserialize)]
312#[serde(rename_all(deserialize = "camelCase"))]
313pub struct CommentReaction {
314 pub user_id: String,
315 pub reaction_type: String,
316}
317
318#[derive(Debug, Clone, Serialize, Deserialize)]
320#[serde(rename_all(deserialize = "camelCase"))]
321pub struct CommentPosition {
322 pub token_id: String,
323 pub outcome: String,
324 pub shares: String,
325}
326
327#[derive(Debug, Clone, Serialize, Deserialize)]
329#[serde(rename_all(deserialize = "camelCase"))]
330pub struct Cursor {
331 pub next_cursor: Option<String>,
332}
333
334#[derive(Debug, Clone, Serialize, Deserialize)]
336#[serde(rename_all(deserialize = "camelCase"))]
337pub struct PaginatedResponse<T> {
338 pub data: Vec<T>,
339 pub next_cursor: Option<String>,
340}