1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
#[derive(Serialize, Deserialize, Debug, PartialEq, Clone)]
pub struct Product {
pub product_id: String,
#[deprecated]
#[serde(skip_serializing_if = "Option::is_none")]
pub week_historic: Option<Vec<Historic>>,
#[serde(flatten)]
pub live_data: LiveProductData,
}
#[derive(Serialize, Deserialize, Debug, PartialEq, Clone)]
pub struct LiveProductData {
pub buy_summary: Vec<Order>,
pub sell_summary: Vec<Order>,
pub quick_status: QuickStatus,
}
#[derive(Serialize, Deserialize, Debug, PartialEq, Clone)]
pub struct QuickStatus {
#[serde(rename = "productId")]
pub product_id: String,
#[serde(rename = "buyPrice")]
pub buy_price: f32,
#[serde(rename = "buyVolume")]
pub buy_volume: f32,
#[serde(rename = "buyMovingWeek")]
pub buy_moving_week: f32,
#[serde(rename = "buyOrders")]
pub buy_orders: f32,
#[serde(rename = "sellPrice")]
pub sell_price: f32,
#[serde(rename = "sellVolume")]
pub sell_volume: f32,
#[serde(rename = "sellMovingWeek")]
pub sell_moving_week: f32,
#[serde(rename = "sellOrders")]
pub sell_orders: f32,
}
#[derive(Serialize, Deserialize, Debug, PartialEq, Clone)]
pub struct Historic {
#[serde(rename = "productId")]
pub product_id: String,
pub timestamp: i64,
#[serde(rename = "nowBuyVolume")]
pub market_demand: f32,
#[serde(rename = "nowSellVolume")]
pub market_supply: f32,
#[serde(rename = "buyCoins")]
pub buy_coins: f32,
#[serde(rename = "buyVolume")]
pub buy_volume: f32,
#[serde(rename = "buys")]
pub instant_buys: f32,
#[serde(rename = "sellCoins")]
pub sell_coins: f32,
#[serde(rename = "sellVolume")]
pub sell_volume: f32,
#[serde(rename = "sells")]
pub instant_sells: f32,
}
impl Historic {
pub fn recent_instant_buy_price(&self) -> f32 {
self.sell_coins / self.sell_volume
}
pub fn recent_instant_sell_price(&self) -> f32 {
self.buy_coins / self.buy_volume
}
}
#[derive(Serialize, Deserialize, Debug, PartialEq, Clone)]
pub struct Order {
pub amount: i32,
#[serde(rename = "pricePerUnit")]
pub price_per_unit: f32,
pub orders: i32,
}