polyte_clob/api/
orders.rs1use reqwest::Client;
2use serde::{Deserialize, Serialize};
3use url::Url;
4
5use crate::{
6 error::Result,
7 request::{AuthMode, Request},
8 signer::Signer,
9 types::{Credentials, SignedOrder},
10 wallet::Wallet,
11};
12
13#[derive(Clone)]
15pub struct Orders {
16 pub(crate) client: Client,
17 pub(crate) base_url: Url,
18 pub(crate) wallet: Wallet,
19 pub(crate) credentials: Credentials,
20 pub(crate) signer: Signer,
21 pub(crate) chain_id: u64,
22}
23
24impl Orders {
25 pub fn list(&self) -> Request<Vec<OpenOrder>> {
27 Request::get(
28 self.client.clone(),
29 self.base_url.clone(),
30 "/data/orders",
31 AuthMode::L2 {
32 address: self.wallet.address(),
33 credentials: self.credentials.clone(),
34 signer: self.signer.clone(),
35 },
36 self.chain_id,
37 )
38 }
39
40 pub fn cancel(&self, order_id: impl Into<String>) -> CancelOrderRequest {
42 CancelOrderRequest {
43 client: self.client.clone(),
44 base_url: self.base_url.clone(),
45 auth: AuthMode::L2 {
46 address: self.wallet.address(),
47 credentials: self.credentials.clone(),
48 signer: self.signer.clone(),
49 },
50 chain_id: self.chain_id,
51 order_id: order_id.into(),
52 }
53 }
54}
55
56pub struct CancelOrderRequest {
58 client: Client,
59 base_url: Url,
60 auth: AuthMode,
61 chain_id: u64,
62 order_id: String,
63}
64
65impl CancelOrderRequest {
66 pub async fn send(self) -> Result<CancelResponse> {
68 #[derive(serde::Serialize)]
69 struct CancelRequest {
70 #[serde(rename = "orderID")]
71 order_id: String,
72 }
73
74 let request = CancelRequest {
75 order_id: self.order_id,
76 };
77
78 Request::delete(
79 self.client,
80 self.base_url,
81 "/order",
82 self.auth,
83 self.chain_id,
84 )
85 .body(&request)?
86 .send()
87 .await
88 }
89}
90
91#[derive(Debug, Clone, Serialize, Deserialize)]
93#[serde(rename_all(deserialize = "camelCase"))]
94pub struct OpenOrder {
95 pub id: String,
96 pub market: String,
97 pub asset_id: String,
98 #[serde(flatten)]
99 pub order: SignedOrder,
100 pub status: String,
101 pub created_at: String,
102 pub updated_at: Option<String>,
103}
104
105#[derive(Debug, Clone, Serialize, Deserialize)]
107#[serde(rename_all(deserialize = "camelCase"))]
108pub struct OrderResponse {
109 pub success: bool,
110 pub error_msg: Option<String>,
111 pub order_id: Option<String>,
112 #[serde(default)]
113 pub transaction_hashes: Vec<String>,
114}
115
116#[derive(Debug, Clone, Serialize, Deserialize)]
118#[serde(rename_all(deserialize = "camelCase"))]
119pub struct CancelResponse {
120 pub success: bool,
121 pub error_msg: Option<String>,
122}