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<u32>,
38 pub twitter_card_image: Option<String>,
39 pub resolution_source: Option<String>,
40 pub amm_type: Option<String>,
41 pub sponsor_name: Option<String>,
42 pub sponsor_image: Option<String>,
43 pub x_axis_value: Option<String>,
44 pub y_axis_value: Option<String>,
45 pub denomation_token: Option<String>,
46 pub fee: Option<String>,
47 pub image: Option<String>,
48 pub icon: Option<String>,
49 pub lower_bound: Option<String>,
50 pub upper_bound: Option<String>,
51 pub outcomes: Option<String>,
52 pub outcome_prices: Option<String>,
53 pub volume: Option<String>,
54 pub active: Option<bool>,
55 pub market_type: Option<String>,
56 pub format_type: Option<String>,
57 pub lower_bound_date: Option<String>,
58 pub upper_bound_date: Option<String>,
59 pub closed: Option<bool>,
60 pub market_maker_address: String,
61 pub created_by: Option<i64>,
62 pub updated_by: Option<i64>,
63 pub created_at: Option<String>,
64 pub updated_at: Option<String>,
65 pub closed_time: Option<String>,
66 pub wide_format: Option<bool>,
67 pub new: Option<bool>,
68 pub mailchimp_tag: Option<String>,
69 pub featured: Option<bool>,
70 pub archived: Option<bool>,
71 pub resolved_by: Option<String>,
72 pub restricted: Option<bool>,
73 pub market_group: Option<i64>,
74 pub group_item_title: Option<String>,
75 pub group_item_threshold: Option<String>,
76 pub uma_end_date: Option<String>,
77 pub uma_resolution_status: Option<String>,
78 pub uma_end_date_iso: Option<String>,
79 pub uma_resolution_statuses: Option<String>,
80 pub enable_order_book: Option<bool>,
81 pub order_price_min_tick_size: Option<f64>,
82 pub order_min_size: Option<f64>,
83 pub curation_order: Option<i64>,
84 pub volume_num: Option<f64>,
85 pub liquidity_num: Option<f64>,
86 pub has_review_dates: Option<bool>,
87 pub ready_for_cron: Option<bool>,
88 pub comments_enabled: Option<bool>,
89 pub game_start_time: Option<String>,
90 pub seconds_delay: Option<i64>,
91 pub clob_token_ids: Option<String>,
92 pub disqus_thread: Option<String>,
93 pub short_outcomes: Option<String>,
94 pub team_aid: Option<String>,
95 pub team_bid: Option<String>,
96 pub uma_bond: Option<String>,
97 pub uma_reward: Option<String>,
98 pub fpmm_live: Option<bool>,
99 pub volume_24hr_amm: Option<f64>,
100 pub volume_1wk_amm: Option<f64>,
101 pub volume_1mo_amm: Option<f64>,
102 pub volume_1yr_amm: Option<f64>,
103 pub volume_24hr_clob: Option<f64>,
104 pub volume_1wk_clob: Option<f64>,
105 pub volume_1mo_clob: Option<f64>,
106 pub volume_1yr_clob: Option<f64>,
107 pub volume_amm: Option<f64>,
108 pub volume_clob: Option<f64>,
109 pub liquidity_amm: Option<f64>,
110 pub liquidity_clob: Option<f64>,
111 pub maker_base_fee: Option<i64>,
112 pub taker_base_fee: Option<i64>,
113 pub custom_liveness: Option<i64>,
114 pub accepting_orders: Option<bool>,
115 pub notifications_enabled: Option<bool>,
116 pub score: Option<i64>,
117 pub creator: Option<String>,
118 pub ready: Option<bool>,
119 pub funded: Option<bool>,
120 pub past_slugs: Option<String>,
121 pub ready_timestamp: Option<String>,
122 pub funded_timestamp: Option<String>,
123 pub accepting_orders_timestamp: Option<String>,
124 pub competitive: Option<f64>,
125 pub rewards_min_size: Option<f64>,
126 pub rewards_max_spreads: Option<f64>,
127 pub spread: Option<f64>,
128 pub automatically_resolved: Option<bool>,
129 pub automatically_active: Option<bool>,
130 pub one_day_price_change: Option<f64>,
131 pub one_hour_price_change: Option<f64>,
132 pub one_week_price_change: Option<f64>,
133 pub one_month_price_change: Option<f64>,
134 pub one_year_price_change: Option<f64>,
135 pub last_trade_price: Option<f64>,
136 pub best_bid: Option<f64>,
137 pub best_ask: Option<f64>,
138 pub clear_book_on_start: Option<bool>,
139 pub chart_color: Option<String>,
140 pub series_color: Option<String>,
141 pub show_gmp_series: Option<bool>,
142 pub show_gmp_outcome: Option<bool>,
143 pub manual_activation: Option<bool>,
144 pub neg_risk_other: Option<bool>,
145 pub game_id: Option<String>,
146 pub group_item_range: Option<String>,
147 pub sports_market_type: Option<String>,
148 pub line: Option<f64>,
149 pub pending_deployment: Option<bool>,
150 pub deploying: Option<bool>,
151 pub deploying_timestamp: Option<String>,
152 pub schedule_deployment_timestamp: Option<String>,
153 pub rfq_enabled: Option<bool>,
154 pub event_start_time: Option<String>,
155}
156
157#[derive(Debug, Clone, Serialize, Deserialize)]
159#[serde(rename_all(deserialize = "camelCase"))]
160pub struct MarketToken {
161 pub token_id: String,
162 pub outcome: String,
163 pub price: Option<String>,
164 pub winner: Option<bool>,
165}
166
167#[derive(Debug, Clone, Serialize, Deserialize)]
169#[serde(rename_all(deserialize = "camelCase"))]
170pub struct Event {
171 pub id: String,
172 pub slug: String,
173 pub title: String,
174 pub description: Option<String>,
175 pub start_date_iso: Option<String>,
176 pub end_date_iso: Option<String>,
177 pub image: Option<String>,
178 pub icon: Option<String>,
179 pub active: bool,
180 pub closed: bool,
181 pub archived: bool,
182 pub new: Option<bool>,
183 pub featured: bool,
184 pub restricted: bool,
185 pub liquidity: Option<f64>,
186 pub volume: Option<f64>,
187 pub volume_24hr: Option<f64>,
188 pub comment_count: Option<u32>,
189 #[serde(default)]
190 pub markets: Vec<Market>,
191 pub cyom: Option<bool>,
192 pub competitive: Option<f64>,
193 #[serde(default)]
194 pub tags: Vec<Tag>,
195 #[serde(default)]
196 pub series: Vec<SeriesInfo>,
197}
198
199#[derive(Debug, Clone, Serialize, Deserialize)]
201#[serde(rename_all(deserialize = "camelCase"))]
202pub struct SeriesInfo {
203 pub id: String,
204 pub slug: String,
205 pub title: String,
206}
207
208#[derive(Debug, Clone, Serialize, Deserialize)]
210#[serde(rename_all(deserialize = "camelCase"))]
211pub struct SeriesData {
212 pub id: String,
213 pub slug: String,
214 pub title: String,
215 pub description: Option<String>,
216 pub image: Option<String>,
217 pub icon: Option<String>,
218 pub active: bool,
219 pub closed: bool,
220 pub archived: bool,
221 #[serde(default)]
222 pub tags: Vec<String>,
223 pub volume: Option<f64>,
224 pub liquidity: Option<f64>,
225 #[serde(default)]
226 pub events: Vec<Event>,
227 pub competitive: Option<String>,
228}
229
230#[derive(Debug, Clone, Serialize, Deserialize)]
232#[serde(rename_all(deserialize = "camelCase"))]
233pub struct Tag {
234 pub id: String,
235 pub slug: String,
236 pub label: String,
237 pub force_show: Option<bool>,
238 pub published_at: Option<String>,
239 pub created_by: Option<u64>,
240 pub updated_by: Option<u64>,
241 pub created_at: Option<String>,
242 pub updated_at: Option<String>,
243 pub force_hide: Option<bool>,
244 pub is_carousel: Option<bool>,
245}
246
247#[derive(Debug, Clone, Serialize, Deserialize)]
249#[serde(rename_all(deserialize = "camelCase"))]
250pub struct SportMetadata {
251 pub id: u64,
252 pub sport: String,
253 pub image: Option<String>,
254 pub resolution: Option<String>,
255 pub ordering: Option<String>,
256 pub tags: Option<String>,
257 pub series: Option<String>,
258 pub created_at: Option<String>,
259}
260
261#[derive(Debug, Clone, Serialize, Deserialize)]
263#[serde(rename_all(deserialize = "camelCase"))]
264pub struct Team {
265 pub id: i64,
266 pub name: Option<String>,
267 pub league: Option<String>,
268 pub record: Option<String>,
269 pub logo: Option<String>,
270 pub abbreviation: Option<String>,
271 pub alias: Option<String>,
272 pub created_at: Option<DateTime<Utc>>,
273 pub updated_at: Option<DateTime<Utc>>,
274}
275
276#[derive(Debug, Clone, Serialize, Deserialize)]
278#[serde(rename_all(deserialize = "camelCase"))]
279pub struct Comment {
280 pub id: String,
281 pub body: String,
282 pub created_at: DateTime<Utc>,
283 pub updated_at: DateTime<Utc>,
284 pub deleted_at: Option<DateTime<Utc>>,
285 pub user: CommentUser,
286 pub market_id: Option<String>,
287 pub event_id: Option<String>,
288 pub series_id: Option<String>,
289 pub parent_id: Option<String>,
290 #[serde(default)]
291 pub reactions: Vec<CommentReaction>,
292 #[serde(default)]
293 pub positions: Vec<CommentPosition>,
294 pub like_count: u32,
295 pub dislike_count: u32,
296 pub reply_count: u32,
297}
298
299#[derive(Debug, Clone, Serialize, Deserialize)]
301#[serde(rename_all(deserialize = "camelCase"))]
302pub struct CommentUser {
303 pub id: String,
304 pub name: String,
305 pub avatar: Option<String>,
306}
307
308#[derive(Debug, Clone, Serialize, Deserialize)]
310#[serde(rename_all(deserialize = "camelCase"))]
311pub struct CommentReaction {
312 pub user_id: String,
313 pub reaction_type: String,
314}
315
316#[derive(Debug, Clone, Serialize, Deserialize)]
318#[serde(rename_all(deserialize = "camelCase"))]
319pub struct CommentPosition {
320 pub token_id: String,
321 pub outcome: String,
322 pub shares: String,
323}
324
325#[derive(Debug, Clone, Serialize, Deserialize)]
327#[serde(rename_all(deserialize = "camelCase"))]
328pub struct Cursor {
329 pub next_cursor: Option<String>,
330}
331
332#[derive(Debug, Clone, Serialize, Deserialize)]
334#[serde(rename_all(deserialize = "camelCase"))]
335pub struct PaginatedResponse<T> {
336 pub data: Vec<T>,
337 pub next_cursor: Option<String>,
338}