aori_rs/
types.rs

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////////////////////////////////////////////////////////////////
18//                 /swap GET request -> response
19////////////////////////////////////////////////////////////////
20
21#[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////////////////////////////////////////////////////////////////
45//                 /swap POST request -> response
46////////////////////////////////////////////////////////////////
47
48#[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//========================================================
72//        Contract Compliant Order Struct Interface
73//========================================================
74
75#[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//========================================================
92//          Quote Request and Response Interfaces
93//========================================================
94
95#[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//========================================================
126//            Swap Request and Response Interfaces
127//========================================================
128
129#[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//========================================================
155//                Chain Info Interface
156//========================================================
157
158#[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//============================================
168//          Order Status Interfaces
169//=============================================
170
171#[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//============================================
203//         Order Details Interfaces
204//=============================================
205
206#[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//========================================================
236//            Query Orders Interfaces
237//========================================================
238
239#[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//========================================================
298//            WebSocket Interfaces
299//========================================================
300
301#[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//========================================================
350//                       Error Types
351//========================================================
352
353#[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>;