1use std::collections::HashMap;
2
3use chrono::{DateTime, Utc};
4use serde::{Deserialize, Serialize};
5
6#[derive(Debug, Clone, Serialize, Deserialize)]
8pub struct Market {
9 #[serde(default)]
10 pub condition_id: Option<String>,
11 #[serde(default)]
12 pub question_id: Option<String>,
13 #[serde(default)]
14 pub tokens: Vec<MarketToken>,
15 #[serde(default)]
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 #[serde(default)]
21 pub category: Option<String>,
22 pub end_date_iso: Option<String>,
23 #[serde(default)]
24 pub game_start_time: Option<String>,
25 pub question: String,
26 #[serde(default)]
27 pub market_slug: Option<String>,
28 pub min_incentive_size: Option<String>,
29 pub max_incentive_spread: Option<String>,
30 pub active: bool,
31 pub closed: bool,
32 pub archived: bool,
33 pub new: Option<bool>,
34 pub featured: Option<bool>,
35 pub submitted_by: Option<String>,
36 pub volume: Option<String>,
37 pub volume_24hr: Option<String>,
38 pub liquidity: Option<String>,
39 #[serde(default)]
40 pub competitive: Option<f64>,
41 #[serde(default)]
42 pub tags: Vec<Tag>,
43 #[serde(default)]
44 pub group_item_threshold: Option<i32>,
45 #[serde(default)]
46 pub group_item_title: Option<String>,
47 #[serde(default)]
48 pub neg_risk: bool,
49 #[serde(default)]
50 pub neg_risk_market_id: Option<String>,
51 #[serde(default)]
52 pub neg_risk_request_id: Option<String>,
53 #[serde(default)]
54 pub enable_order_book: bool,
55 #[serde(default)]
56 pub order_price_min_tick_size: Option<String>,
57 #[serde(default)]
58 pub order_min_size: Option<String>,
59 #[serde(default)]
60 pub seconds_delay: Option<i32>,
61 #[serde(default)]
62 pub icon: Option<String>,
63 #[serde(default)]
64 pub comment_count: u32,
65}
66
67#[derive(Debug, Clone, Serialize, Deserialize)]
69pub struct MarketToken {
70 pub token_id: String,
71 pub outcome: String,
72 #[serde(default)]
73 pub price: Option<String>,
74 #[serde(default)]
75 pub winner: bool,
76}
77
78#[derive(Debug, Clone, Serialize, Deserialize)]
80pub struct Event {
81 pub id: String,
82 pub slug: String,
83 pub title: String,
84 #[serde(default)]
85 pub description: Option<String>,
86 pub start_date_iso: Option<String>,
87 pub end_date_iso: Option<String>,
88 #[serde(default)]
89 pub image: Option<String>,
90 #[serde(default)]
91 pub icon: Option<String>,
92 pub active: bool,
93 pub closed: bool,
94 pub archived: bool,
95 pub new: Option<bool>,
96 pub featured: bool,
97 pub restricted: bool,
98 pub liquidity: Option<f64>,
99 pub volume: Option<f64>,
100 pub volume_24hr: Option<f64>,
101 pub comment_count: Option<u32>,
102 #[serde(default)]
103 pub markets: Vec<Market>,
104 #[serde(default)]
105 pub cyom: bool,
106 #[serde(default)]
107 pub competitive: Option<f64>,
108 #[serde(default)]
109 pub tags: Vec<Tag>,
110 #[serde(default)]
111 pub series: Vec<SeriesInfo>,
112}
113
114#[derive(Debug, Clone, Serialize, Deserialize)]
116pub struct SeriesInfo {
117 pub id: String,
118 pub slug: String,
119 pub title: String,
120}
121
122#[derive(Debug, Clone, Serialize, Deserialize)]
124pub struct SeriesData {
125 pub id: String,
126 pub slug: String,
127 pub title: String,
128 #[serde(default)]
129 pub description: Option<String>,
130 #[serde(default)]
131 pub image: Option<String>,
132 #[serde(default)]
133 pub icon: Option<String>,
134 pub active: bool,
135 pub closed: bool,
136 pub archived: bool,
137 #[serde(default)]
138 pub tags: Vec<String>,
139 pub volume: Option<f64>,
140 pub liquidity: Option<f64>,
141 #[serde(default)]
142 pub events: Vec<Event>,
143 #[serde(default)]
144 pub competitive: Option<String>,
145}
146
147#[derive(Debug, Clone, Serialize, Deserialize)]
149#[serde(rename_all = "camelCase")]
150pub struct Tag {
151 pub id: String,
152 pub slug: String,
153 pub label: String,
154 pub force_show: Option<bool>,
155 pub published_at: Option<String>,
156 pub created_by: Option<u64>,
157 pub updated_by: Option<u64>,
158 pub created_at: Option<String>,
159 pub updated_at: Option<String>,
160 pub force_hide: Option<bool>,
161 pub is_carousel: Option<bool>,
162}
163
164#[derive(Debug, Clone, Serialize, Deserialize)]
166pub struct SportMetadata {
167 pub id: u64,
168 pub sport: String,
169 #[serde(default)]
170 pub image: Option<String>,
171 #[serde(default)]
172 pub resolution: Option<String>,
173 #[serde(default)]
174 pub ordering: Option<String>,
175 #[serde(default)]
176 pub tags: Option<String>,
177 #[serde(default)]
178 pub series: Option<String>,
179 #[serde(default, rename = "createdAt")]
180 pub created_at: Option<String>,
181}
182
183#[derive(Debug, Clone, Serialize, Deserialize)]
185pub struct Team {
186 pub id: i64,
187 #[serde(default)]
188 pub name: Option<String>,
189 #[serde(default)]
190 pub league: Option<String>,
191 #[serde(default)]
192 pub record: Option<String>,
193 #[serde(default)]
194 pub logo: Option<String>,
195 #[serde(default)]
196 pub abbreviation: Option<String>,
197 #[serde(default)]
198 pub alias: Option<String>,
199 #[serde(default, rename = "createdAt")]
200 pub created_at: Option<DateTime<Utc>>,
201 #[serde(default, rename = "updatedAt")]
202 pub updated_at: Option<DateTime<Utc>>,
203}
204
205#[derive(Debug, Clone, Serialize, Deserialize)]
207pub struct Comment {
208 pub id: String,
209 pub body: String,
210 pub created_at: DateTime<Utc>,
211 pub updated_at: DateTime<Utc>,
212 #[serde(default)]
213 pub deleted_at: Option<DateTime<Utc>>,
214 pub user: CommentUser,
215 #[serde(default)]
216 pub market_id: Option<String>,
217 #[serde(default)]
218 pub event_id: Option<String>,
219 #[serde(default)]
220 pub series_id: Option<String>,
221 #[serde(default)]
222 pub parent_id: Option<String>,
223 #[serde(default)]
224 pub reactions: Vec<CommentReaction>,
225 #[serde(default)]
226 pub positions: Vec<CommentPosition>,
227 pub like_count: u32,
228 pub dislike_count: u32,
229 pub reply_count: u32,
230}
231
232#[derive(Debug, Clone, Serialize, Deserialize)]
234pub struct CommentUser {
235 pub id: String,
236 pub name: String,
237 #[serde(default)]
238 pub avatar: Option<String>,
239}
240
241#[derive(Debug, Clone, Serialize, Deserialize)]
243pub struct CommentReaction {
244 pub user_id: String,
245 pub reaction_type: String,
246}
247
248#[derive(Debug, Clone, Serialize, Deserialize)]
250pub struct CommentPosition {
251 pub token_id: String,
252 pub outcome: String,
253 pub shares: String,
254}
255
256#[derive(Debug, Clone, Serialize, Deserialize)]
258pub struct Cursor {
259 #[serde(default)]
260 pub next_cursor: Option<String>,
261}
262
263#[derive(Debug, Clone, Serialize, Deserialize)]
265pub struct PaginatedResponse<T> {
266 pub data: Vec<T>,
267 #[serde(default)]
268 pub next_cursor: Option<String>,
269}