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