1use serde::{Deserialize, Serialize};
2
3#[derive(Default, Debug, Deserialize, Serialize)]
4pub struct AoriOrder {
5 offerer: String,
6 recipient: String,
7 input_token: String,
8 input_amount: String,
9 output_token: String,
10 output_amount: String,
11 start_time: u32,
12 end_time: u32,
13 src_eid: u32,
14 dst_eid: u32,
15}
16
17#[derive(Serialize, Deserialize, Debug)]
22#[serde(rename_all = "camelCase")]
23pub struct SwapGetRequest {
24 pub input_token: String,
25 pub input_amount: String,
26 pub input_chain_id: u32,
27 pub output_token: String,
28 pub output_chain_id: Option<u32>,
29}
30
31#[derive(Serialize, Deserialize, Debug)]
32#[serde(rename_all = "camelCase")]
33pub struct SwapGetResponse {
34 pub input_token: String,
35 pub input_amount: String,
36 pub input_chain_id: u32,
37 pub output_token: String,
38 pub output_amount: String,
39 pub chain_id: u32,
40 pub output_chain_id: u32,
41 pub calldata: String,
42}
43
44#[derive(Serialize, Deserialize, Debug)]
49#[serde(rename_all = "camelCase")]
50pub struct SwapPostRequest {
51 pub input_token: String,
52 pub input_amount: String,
53 pub input_chain_id: u32,
54 pub output_token: String,
55 pub output_chain_id: Option<u32>,
56}
57
58#[derive(Serialize, Deserialize, Debug)]
59#[serde(rename_all = "camelCase")]
60pub struct SwapPostResponse {
61 pub input_token: String,
62 pub input_amount: String,
63 pub input_chain_id: u32,
64 pub output_token: String,
65 pub output_amount: String,
66 pub chain_id: u32,
67 pub output_chain_id: u32,
68 pub calldata: String,
69}
70
71#[derive(Debug, Clone, Serialize, Deserialize)]
76#[serde(rename_all = "camelCase")]
77pub struct Order {
78 pub offerer: String,
79 pub recipient: String,
80 pub input_token: String,
81 pub output_token: String,
82 pub input_amount: String,
83 pub input_chain: String,
84 pub output_chain: String,
85 pub start_time: u64,
86 pub end_time: u64,
87 pub src_eid: u32,
88 pub dst_eid: u32,
89}
90
91#[derive(Debug, Clone, Serialize, Deserialize)]
96#[serde(rename_all = "camelCase")]
97pub struct QuoteRequest {
98 pub offerer: String,
99 pub recipient: String,
100 pub input_token: String,
101 pub output_token: String,
102 pub input_amount: String,
103 pub input_chain: String,
104 pub output_chain: String,
105}
106
107#[derive(Debug, Clone, Serialize, Deserialize)]
108#[serde(rename_all = "camelCase")]
109pub struct QuoteResponse {
110 pub order_hash: String,
111 pub signing_hash: String,
112 pub offerer: String,
113 pub recipient: String,
114 pub input_token: String,
115 pub output_token: String,
116 pub input_amount: String,
117 pub output_amount: String,
118 pub input_chain: String,
119 pub output_chain: String,
120 pub start_time: u64,
121 pub end_time: u64,
122 pub estimated_time: u32,
123}
124
125#[derive(Debug, Clone, Serialize, Deserialize)]
130#[serde(rename_all = "camelCase")]
131pub struct SwapRequest {
132 pub order_hash: String,
133 pub signature: String,
134}
135
136#[derive(Debug, Clone, Serialize, Deserialize)]
137#[serde(rename_all = "camelCase")]
138pub struct SwapResponse {
139 pub order_hash: String,
140 pub offerer: String,
141 pub recipient: String,
142 pub input_token: String,
143 pub output_token: String,
144 pub input_amount: String,
145 pub output_amount: String,
146 pub input_chain: String,
147 pub output_chain: String,
148 pub start_time: u64,
149 pub end_time: u64,
150 pub status: String,
151 pub created_at: u64,
152}
153
154#[derive(Debug, Clone, Serialize, Deserialize)]
159#[serde(rename_all = "camelCase")]
160pub struct ChainInfo {
161 pub chain_key: String,
162 pub chain_id: u32,
163 pub eid: u32,
164 pub address: String,
165}
166
167#[derive(Debug, Clone, Serialize, Deserialize)]
172#[serde(rename_all = "camelCase")]
173#[serde(tag = "status")]
174pub enum OrderStatus {
175 Pending(OrderPendingStatus),
176 Received(OrderTxStatus),
177 Completed(OrderTxStatus),
178 Failed(OrderFailedStatus),
179}
180
181#[derive(Debug, Clone, Serialize, Deserialize)]
182#[serde(rename_all = "camelCase")]
183pub struct OrderPendingStatus {
184 pub timestamp: u64,
185}
186
187#[derive(Debug, Clone, Serialize, Deserialize)]
188#[serde(rename_all = "camelCase")]
189pub struct OrderTxStatus {
190 pub tx_hash: String,
191 pub tx_url: String,
192 pub timestamp: u64,
193}
194
195#[derive(Debug, Clone, Serialize, Deserialize)]
196#[serde(rename_all = "camelCase")]
197pub struct OrderFailedStatus {
198 pub error: String,
199 pub timestamp: u64,
200}
201
202#[derive(Debug, Clone, Serialize, Deserialize)]
207#[serde(rename_all = "camelCase")]
208pub struct OrderEvent {
209 pub event_type: String,
210 pub timestamp: i64,
211}
212
213#[derive(Debug, Clone, Serialize, Deserialize)]
214#[serde(rename_all = "camelCase")]
215pub struct OrderDetails {
216 pub order_hash: String,
217 pub offerer: String,
218 pub recipient: String,
219 pub input_token: String,
220 pub input_amount: String,
221 pub input_chain: String,
222 pub input_token_value_usd: String,
223 pub output_token: String,
224 pub output_amount: String,
225 pub output_chain: String,
226 pub output_token_value_usd: String,
227 pub start_time: i64,
228 pub end_time: i64,
229 pub src_tx: Option<String>,
230 pub dst_tx: Option<String>,
231 pub timestamp: i64,
232 pub events: Vec<OrderEvent>,
233}
234
235#[derive(Debug, Clone, Serialize, Deserialize, Default)]
240#[serde(rename_all = "camelCase")]
241pub struct QueryOrdersParams {
242 pub order_hash: Option<String>,
243 pub offerer: Option<String>,
244 pub recipient: Option<String>,
245 pub input_token: Option<String>,
246 pub input_chain: Option<String>,
247 pub output_token: Option<String>,
248 pub min_value: Option<String>,
249 pub max_value: Option<String>,
250 pub output_chain: Option<String>,
251 pub srctx: Option<String>,
252 pub dst_tx: Option<String>,
253 pub status: Option<String>,
254 pub min_time: Option<i64>,
255 pub max_time: Option<i64>,
256 pub page: Option<i64>,
257 pub limit: Option<i64>,
258}
259
260#[derive(Debug, Clone, Serialize, Deserialize)]
261#[serde(rename_all = "camelCase")]
262pub struct OrderQueryResult {
263 pub order_hash: String,
264 pub offerer: String,
265 pub recipient: String,
266 pub input_token: String,
267 pub input_amount: String,
268 pub input_chain: String,
269 pub input_token_value_usd: String,
270 pub output_token: String,
271 pub output_amount: String,
272 pub output_chain: String,
273 pub output_token_value_usd: String,
274 pub start_time: i64,
275 pub end_time: i64,
276 pub src_tx: Option<String>,
277 pub dst_tx: Option<String>,
278 pub timestamp: i64,
279 pub status: String,
280}
281
282#[derive(Debug, Clone, Serialize, Deserialize)]
283#[serde(rename_all = "camelCase")]
284pub struct PaginationMetadata {
285 pub current_page: i64,
286 pub limit: i64,
287 pub total_records: i64,
288 pub total_pages: i64,
289}
290
291#[derive(Debug, Clone, Serialize, Deserialize)]
292pub struct QueryOrdersResponse {
293 pub orders: Vec<OrderQueryResult>,
294 pub pagination: PaginationMetadata,
295}
296
297#[derive(Debug, Clone, Serialize, Deserialize)]
302#[serde(rename_all = "camelCase")]
303pub struct SubscriptionParams {
304 pub order_hash: Option<String>,
305 pub offerer: Option<String>,
306 pub recipient: Option<String>,
307 pub input_token: Option<String>,
308 pub input_chain: Option<String>,
309 pub output_token: Option<String>,
310 pub output_chain: Option<String>,
311 pub event_type: Option<String>,
312}
313
314#[derive(Debug, Clone, Serialize, Deserialize)]
315#[serde(rename_all = "lowercase")]
316pub enum WSEventType {
317 Created,
318 Received,
319 Completed,
320 Failed,
321}
322
323#[derive(Debug, Clone, Serialize, Deserialize)]
324#[serde(rename_all = "camelCase")]
325pub struct WSOrder {
326 pub order_hash: String,
327 pub offerer: String,
328 pub recipient: String,
329 pub input_token: String,
330 pub input_amount: String,
331 pub input_chain: String,
332 pub output_token: String,
333 pub output_amount: String,
334 pub output_chain: String,
335 pub start_time: u64,
336 pub src_tx: String,
337 pub dst_tx: String,
338 pub end_time: u64,
339}
340
341#[derive(Debug, Clone, Serialize, Deserialize)]
342#[serde(rename_all = "camelCase")]
343pub struct WSEvent {
344 pub event_type: WSEventType,
345 pub timestamp: u64,
346 pub order: WSOrder,
347}
348
349#[derive(Debug, thiserror::Error)]
354pub enum AoriError {
355 #[error("HTTP request failed: {0}")]
356 Http(#[from] reqwest::Error),
357
358 #[error("JSON serialization/deserialization failed: {0}")]
359 Json(#[from] serde_json::Error),
360
361 #[error("WebSocket error: {0}")]
362 WebSocket(String),
363
364 #[error("Cryptographic error: {0}")]
365 Crypto(String),
366
367 #[error("API error: {0}")]
368 Api(String),
369
370 #[error("Invalid input: {0}")]
371 InvalidInput(String),
372
373 #[error("Chain not found: {0}")]
374 ChainNotFound(String),
375}
376
377pub type Result<T> = std::result::Result<T, AoriError>;