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