polyoxide_clob/api/
account.rs1use alloy::primitives::Address;
2use polyoxide_core::QueryBuilder;
3use reqwest::Client;
4use serde::{Deserialize, Serialize};
5use std::collections::HashMap;
6use url::Url;
7
8use crate::{
9 account::{Credentials, Signer, Wallet},
10 request::{AuthMode, Request},
11 types::OrderSide,
12};
13
14#[derive(Clone)]
16pub struct AccountApi {
17 pub(crate) client: Client,
18 pub(crate) base_url: Url,
19 pub(crate) wallet: Wallet,
20 pub(crate) credentials: Credentials,
21 pub(crate) signer: Signer,
22 pub(crate) chain_id: u64,
23}
24
25impl AccountApi {
26 pub fn balance_allowance(
28 &self,
29 token_id: impl Into<String>,
30 ) -> Request<BalanceAllowanceResponse> {
31 Request::get(
32 self.client.clone(),
33 self.base_url.clone(),
34 "/balance-allowance",
35 AuthMode::L2 {
36 address: self.wallet.clone().address(),
37 credentials: self.credentials.clone(),
38 signer: self.signer.clone(),
39 },
40 self.chain_id,
41 )
42 .query("token_id", token_id.into())
43 }
44
45 pub fn usdc_balance(&self) -> Request<BalanceAllowanceResponse> {
46 Request::get(
47 self.client.clone(),
48 self.base_url.clone(),
49 "/balance-allowance",
50 AuthMode::L2 {
51 address: self.wallet.clone().address(),
52 credentials: self.credentials.clone(),
53 signer: self.signer.clone(),
54 },
55 self.chain_id,
56 )
57 .query("asset_type", "COLLATERAL")
58 .query("signature_type", 1)
59 }
60
61 pub fn trades(&self) -> Request<Vec<Trade>> {
63 Request::get(
64 self.client.clone(),
65 self.base_url.clone(),
66 "/trades",
67 AuthMode::L2 {
68 address: self.wallet.clone().address(),
69 credentials: self.credentials.clone(),
70 signer: self.signer.clone(),
71 },
72 self.chain_id,
73 )
74 }
75}
76
77#[derive(Debug, Clone, Serialize, Deserialize)]
79pub struct Trade {
80 pub id: String,
81 pub taker_order_id: String,
82 pub market: String,
83 pub asset_id: String,
84 pub side: OrderSide,
85 pub size: String,
86 pub fee_rate_bps: String,
87 pub price: String,
88 pub status: String,
89 pub match_time: String,
90 #[serde(default)]
91 pub last_update: Option<String>,
92 pub outcome: String,
93 #[serde(default)]
94 pub bucket_index: Option<u32>,
95 pub owner: Address,
96 pub transaction_hash: String,
97}
98
99#[derive(Debug, Clone, Serialize, Deserialize)]
101pub struct BalanceAllowanceResponse {
102 pub balance: String,
103 pub allowances: HashMap<Address, String>,
104}