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