deribit_base/model/
transaction.rs1use crate::{impl_json_debug_pretty, impl_json_display};
8use serde::{Deserialize, Serialize};
9
10#[derive(Clone, Serialize, Deserialize, Default)]
12pub enum TransactionType {
13 Deposit,
15 Withdrawal,
17 #[default]
19 Trade,
20 Transfer,
22 Fee,
24 Funding,
26 Bonus,
28 Dividend,
30 Liquidation,
32 Insurance,
34}
35
36#[derive(Clone, Serialize, Deserialize)]
38pub struct TransactionLogEntry {
39 pub id: u64,
41 pub currency: String,
43 pub amount: f64,
45 pub balance: f64,
47 pub timestamp: u64,
49 pub transaction_type: TransactionType,
51 pub info: Option<String>,
53}
54
55impl Default for TransactionLogEntry {
56 fn default() -> Self {
57 Self {
58 id: 0,
59 currency: String::new(),
60 amount: 0.0,
61 balance: 0.0,
62 timestamp: 0,
63 transaction_type: TransactionType::default(),
64 info: None,
65 }
66 }
67}
68
69impl_json_display!(TransactionLogEntry);
70impl_json_debug_pretty!(TransactionLogEntry);
71
72#[derive(Clone, Serialize, Deserialize, Default)]
74pub struct TransactionLog {
75 pub continuation: Option<String>,
77 pub logs: Vec<TransactionLogEntry>,
79}
80
81impl_json_display!(TransactionLog);
82impl_json_debug_pretty!(TransactionLog);
83
84#[derive(Clone, Serialize, Deserialize)]
86pub struct Deposit {
87 pub address: String,
89 pub amount: f64,
91 pub currency: String,
93 pub state: String,
95 pub received_timestamp: u64,
97 pub transaction_id: Option<String>,
99 #[serde(skip_serializing_if = "Option::is_none")]
101 pub updated_timestamp: Option<u64>,
102}
103
104impl_json_display!(Deposit);
105impl_json_debug_pretty!(Deposit);
106
107#[derive(Clone, Serialize, Deserialize)]
109pub struct DepositsResponse {
110 pub count: u32,
112 pub data: Vec<Deposit>,
114}
115
116impl_json_display!(DepositsResponse);
117impl_json_debug_pretty!(DepositsResponse);
118
119#[derive(Clone, Serialize, Deserialize)]
121pub struct Withdrawal {
122 pub address: String,
124 pub amount: f64,
126 pub currency: String,
128 pub fee: f64,
130 pub id: u64,
132 pub priority: String,
134 pub state: String,
136 pub created_timestamp: u64,
138 pub updated_timestamp: Option<u64>,
140 pub transaction_id: Option<String>,
142}
143
144impl_json_display!(Withdrawal);
145impl_json_debug_pretty!(Withdrawal);
146
147#[derive(Clone, Serialize, Deserialize)]
149pub struct WithdrawalsResponse {
150 pub count: u32,
152 pub data: Vec<Withdrawal>,
154}
155
156impl_json_display!(WithdrawalsResponse);
157impl_json_debug_pretty!(WithdrawalsResponse);
158
159#[cfg(test)]
160mod tests {
161 use super::*;
162
163 #[test]
164 fn test_default_transaction_log_entry() {
165 let tx = TransactionLogEntry::default();
166 assert_eq!(tx.id, 0);
167 assert_eq!(tx.amount, 0.0);
168 }
169}