polyte_data/api/
trades.rs1use reqwest::Client;
2use url::Url;
3
4use crate::{
5 request::{QueryBuilder, Request},
6 types::{Trade, TradeFilterType, TradeSide},
7};
8
9#[derive(Clone)]
11pub struct Trades {
12 pub(crate) client: Client,
13 pub(crate) base_url: Url,
14}
15
16impl Trades {
17 pub fn list(&self) -> ListTrades {
19 ListTrades {
20 request: Request::new(
21 self.client.clone(),
22 self.base_url.clone(),
23 "/trades".to_string(),
24 ),
25 }
26 }
27}
28
29pub struct ListTrades {
31 request: Request<Vec<Trade>>,
32}
33
34impl ListTrades {
35 pub fn user(mut self, user: impl Into<String>) -> Self {
37 self.request = self.request.query("user", user.into());
38 self
39 }
40
41 pub fn market(mut self, condition_ids: impl IntoIterator<Item = impl ToString>) -> Self {
44 let ids: Vec<String> = condition_ids.into_iter().map(|s| s.to_string()).collect();
45 if !ids.is_empty() {
46 self.request = self.request.query("market", ids.join(","));
47 }
48 self
49 }
50
51 pub fn event_id(mut self, event_ids: impl IntoIterator<Item = impl ToString>) -> Self {
54 let ids: Vec<String> = event_ids.into_iter().map(|s| s.to_string()).collect();
55 if !ids.is_empty() {
56 self.request = self.request.query("eventId", ids.join(","));
57 }
58 self
59 }
60
61 pub fn side(mut self, side: TradeSide) -> Self {
63 self.request = self.request.query("side", side);
64 self
65 }
66
67 pub fn taker_only(mut self, taker_only: bool) -> Self {
69 self.request = self.request.query("takerOnly", taker_only);
70 self
71 }
72
73 pub fn filter_type(mut self, filter_type: TradeFilterType) -> Self {
75 self.request = self.request.query("filterType", filter_type);
76 self
77 }
78
79 pub fn filter_amount(mut self, amount: f64) -> Self {
81 self.request = self.request.query("filterAmount", amount);
82 self
83 }
84
85 pub fn limit(mut self, limit: u32) -> Self {
87 self.request = self.request.query("limit", limit);
88 self
89 }
90
91 pub fn offset(mut self, offset: u32) -> Self {
93 self.request = self.request.query("offset", offset);
94 self
95 }
96
97 pub async fn send(self) -> crate::error::Result<Vec<Trade>> {
99 self.request.send().await
100 }
101}