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