rust_okx/api/convert/
responses.rs1use std::fmt;
2
3use serde::{Deserialize, Deserializer};
4
5use crate::model::{NumberString, OrderSide};
6
7#[derive(Debug, Clone, Deserialize)]
9#[serde(rename_all = "camelCase")]
10#[non_exhaustive]
11pub struct ConvertCurrency {
12 pub ccy: String,
14
15 #[serde(default)]
19 pub min: NumberString,
20
21 #[serde(default)]
25 pub max: NumberString,
26}
27
28#[derive(Debug, Clone, Deserialize)]
30#[serde(rename_all = "camelCase")]
31#[non_exhaustive]
32pub struct ConvertCurrencyPair {
33 pub inst_id: String,
35
36 pub base_ccy: String,
38
39 pub base_ccy_max: NumberString,
41
42 pub base_ccy_min: NumberString,
44
45 pub quote_ccy: String,
47
48 pub quote_ccy_max: NumberString,
50
51 pub quote_ccy_min: NumberString,
53}
54
55#[derive(Debug, Clone, Deserialize)]
57#[serde(rename_all = "camelCase")]
58#[non_exhaustive]
59pub struct ConvertQuote {
60 pub quote_time: NumberString,
62
63 pub ttl_ms: NumberString,
65
66 #[serde(default)]
68 pub cl_q_req_id: String,
69
70 pub quote_id: String,
72
73 pub base_ccy: String,
75
76 pub quote_ccy: String,
78
79 pub side: OrderSide,
81
82 pub orig_rfq_sz: NumberString,
84
85 pub rfq_sz: NumberString,
87
88 pub rfq_sz_ccy: String,
90
91 pub cnvt_px: NumberString,
93
94 pub base_sz: NumberString,
96
97 pub quote_sz: NumberString,
99}
100
101#[derive(Debug, Clone, PartialEq, Eq, Hash)]
103#[non_exhaustive]
104pub enum ConvertTradeState {
105 FullyFilled,
107
108 Rejected,
110
111 Unknown(String),
113}
114
115impl ConvertTradeState {
116 pub fn as_str(&self) -> &str {
118 match self {
119 Self::FullyFilled => "fullyFilled",
120 Self::Rejected => "rejected",
121 Self::Unknown(value) => value,
122 }
123 }
124}
125
126impl From<&str> for ConvertTradeState {
127 fn from(value: &str) -> Self {
128 match value {
129 "fullyFilled" => Self::FullyFilled,
130 "rejected" => Self::Rejected,
131 other => Self::Unknown(other.to_owned()),
132 }
133 }
134}
135
136impl fmt::Display for ConvertTradeState {
137 fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
138 formatter.write_str(self.as_str())
139 }
140}
141
142impl<'de> Deserialize<'de> for ConvertTradeState {
143 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
144 where
145 D: Deserializer<'de>,
146 {
147 let value = String::deserialize(deserializer)?;
148 Ok(Self::from(value.as_str()))
149 }
150}
151
152#[derive(Debug, Clone, Deserialize)]
154#[serde(rename_all = "camelCase")]
155#[non_exhaustive]
156pub struct ConvertTradeResult {
157 pub trade_id: String,
159
160 pub quote_id: String,
162
163 #[serde(default)]
165 pub cl_t_req_id: String,
166
167 pub state: ConvertTradeState,
169
170 pub inst_id: String,
172
173 pub base_ccy: String,
175
176 pub quote_ccy: String,
178
179 pub side: OrderSide,
181
182 pub fill_px: NumberString,
184
185 pub fill_base_sz: NumberString,
187
188 pub fill_quote_sz: NumberString,
190
191 pub ts: NumberString,
193}
194
195#[derive(Debug, Clone, Deserialize)]
197#[serde(rename_all = "camelCase")]
198#[non_exhaustive]
199pub struct ConvertHistory {
200 pub trade_id: String,
202
203 #[serde(default)]
205 pub cl_t_req_id: String,
206
207 pub state: ConvertTradeState,
209
210 pub inst_id: String,
212
213 pub base_ccy: String,
215
216 pub quote_ccy: String,
218
219 pub side: OrderSide,
221
222 pub fill_px: NumberString,
224
225 pub fill_base_sz: NumberString,
227
228 pub fill_quote_sz: NumberString,
230
231 pub ts: NumberString,
233}