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
use crate::{Client, OrderInfo, Result};
use serde::{de::DeserializeOwned, Deserialize};
use std::collections::HashMap;
#[must_use = "Does nothing until you send or execute it"]
pub struct GetOpenOrdersRequest {
client: Client,
trades: Option<bool>,
userref: Option<i32>,
}
impl GetOpenOrdersRequest {
pub fn trades(self, trades: bool) -> Self {
Self {
trades: Some(trades),
..self
}
}
pub fn userref(self, userref: i32) -> Self {
Self {
userref: Some(userref),
..self
}
}
pub async fn execute<T: DeserializeOwned>(self) -> Result<T> {
let mut query: Vec<String> = Vec::new();
if let Some(true) = self.trades {
query.push(String::from("trades=true"));
}
if let Some(userref) = self.userref {
query.push(format!("userref={}", userref));
}
let query = if query.is_empty() {
None
} else {
Some(query.join("&"))
};
self.client
.send_private("/0/private/OpenOrders", query)
.await
}
pub async fn send(self) -> Result<GetOpenOrdersResponse> {
self.execute().await
}
}
#[derive(Debug, Deserialize)]
pub struct OpenOrderInfo {
pub status: String,
pub cost: String,
pub descr: OrderInfo,
pub opentm: f64,
pub oflags: String,
pub fee: String,
pub vol: String,
pub vol_executed: Option<String>,
pub userref: Option<i32>,
}
#[derive(Debug, Deserialize)]
pub struct GetOpenOrdersResponse {
pub open: HashMap<String, OpenOrderInfo>,
}
impl Client {
pub fn get_open_orders(&self) -> GetOpenOrdersRequest {
GetOpenOrdersRequest {
client: self.clone(),
trades: None,
userref: None,
}
}
}