drm_core/models/
trade.rs

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}