1use chrono::{DateTime, Utc};
2use serde::{Deserialize, Serialize};
3
4#[derive(Debug, Clone, Serialize, Deserialize)]
5pub struct PublicTrade {
6 pub proxy_wallet: String,
7 pub side: String,
8 pub asset: String,
9 pub condition_id: String,
10 pub size: f64,
11 pub price: f64,
12 pub timestamp: DateTime<Utc>,
13 #[serde(default, skip_serializing_if = "Option::is_none")]
14 pub title: Option<String>,
15 #[serde(default, skip_serializing_if = "Option::is_none")]
16 pub slug: Option<String>,
17 #[serde(default, skip_serializing_if = "Option::is_none")]
18 pub icon: Option<String>,
19 #[serde(default, skip_serializing_if = "Option::is_none")]
20 pub event_slug: Option<String>,
21 #[serde(default, skip_serializing_if = "Option::is_none")]
22 pub outcome: Option<String>,
23 #[serde(default, skip_serializing_if = "Option::is_none")]
24 pub outcome_index: Option<u32>,
25 #[serde(default, skip_serializing_if = "Option::is_none")]
26 pub name: Option<String>,
27 #[serde(default, skip_serializing_if = "Option::is_none")]
28 pub pseudonym: Option<String>,
29 #[serde(default, skip_serializing_if = "Option::is_none")]
30 pub bio: Option<String>,
31 #[serde(default, skip_serializing_if = "Option::is_none")]
32 pub profile_image: Option<String>,
33 #[serde(default, skip_serializing_if = "Option::is_none")]
34 pub profile_image_optimized: Option<String>,
35 #[serde(default, skip_serializing_if = "Option::is_none")]
36 pub transaction_hash: Option<String>,
37}
38
39#[derive(Debug, Clone, Serialize, Deserialize)]
40pub struct PricePoint {
41 pub timestamp: DateTime<Utc>,
42 pub price: f64,
43 #[serde(default)]
44 pub raw: serde_json::Value,
45}
46
47#[derive(Debug, Clone, Serialize, Deserialize)]
48pub struct Tag {
49 pub id: String,
50 #[serde(default, skip_serializing_if = "Option::is_none")]
51 pub label: Option<String>,
52 #[serde(default, skip_serializing_if = "Option::is_none")]
53 pub slug: Option<String>,
54 #[serde(default, skip_serializing_if = "Option::is_none")]
55 pub force_show: Option<bool>,
56 #[serde(default, skip_serializing_if = "Option::is_none")]
57 pub force_hide: Option<bool>,
58 #[serde(default, skip_serializing_if = "Option::is_none")]
59 pub is_carousel: Option<bool>,
60 #[serde(default, skip_serializing_if = "Option::is_none")]
61 pub published_at: Option<String>,
62 #[serde(default, skip_serializing_if = "Option::is_none")]
63 pub created_at: Option<String>,
64 #[serde(default, skip_serializing_if = "Option::is_none")]
65 pub updated_at: Option<String>,
66 #[serde(default)]
67 pub raw: serde_json::Value,
68}
69
70#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
71pub enum PriceHistoryInterval {
72 #[serde(rename = "1m")]
73 OneMinute,
74 #[serde(rename = "1h")]
75 OneHour,
76 #[serde(rename = "6h")]
77 SixHours,
78 #[serde(rename = "1d")]
79 OneDay,
80 #[serde(rename = "1w")]
81 OneWeek,
82 #[serde(rename = "max")]
83 Max,
84}
85
86impl PriceHistoryInterval {
87 pub fn as_str(&self) -> &'static str {
88 match self {
89 Self::OneMinute => "1m",
90 Self::OneHour => "1h",
91 Self::SixHours => "6h",
92 Self::OneDay => "1d",
93 Self::OneWeek => "1w",
94 Self::Max => "max",
95 }
96 }
97}