polyoxide_data/api/
market_positions.rs1use polyoxide_core::{HttpClient, QueryBuilder, Request};
2
3use crate::{
4 error::DataApiError,
5 types::{MarketPositionSortBy, MarketPositionStatus, MetaMarketPositionV1, SortDirection},
6};
7
8#[derive(Clone)]
13pub struct MarketPositionsApi {
14 pub(crate) http_client: HttpClient,
15}
16
17impl MarketPositionsApi {
18 pub fn list(&self, market: impl Into<String>) -> ListMarketPositions {
22 let mut request = Request::new(self.http_client.clone(), "/v1/market-positions");
23 request = request.query("market", market.into());
24 ListMarketPositions { request }
25 }
26}
27
28pub struct ListMarketPositions {
30 request: Request<Vec<MetaMarketPositionV1>, DataApiError>,
31}
32
33impl ListMarketPositions {
34 pub fn user(mut self, user_address: impl Into<String>) -> Self {
36 self.request = self.request.query("user", user_address.into());
37 self
38 }
39
40 pub fn status(mut self, status: MarketPositionStatus) -> Self {
42 self.request = self.request.query("status", status);
43 self
44 }
45
46 pub fn sort_by(mut self, sort_by: MarketPositionSortBy) -> Self {
48 self.request = self.request.query("sortBy", sort_by);
49 self
50 }
51
52 pub fn sort_direction(mut self, direction: SortDirection) -> Self {
54 self.request = self.request.query("sortDirection", direction);
55 self
56 }
57
58 pub fn limit(mut self, limit: u32) -> Self {
60 self.request = self.request.query("limit", limit);
61 self
62 }
63
64 pub fn offset(mut self, offset: u32) -> Self {
66 self.request = self.request.query("offset", offset);
67 self
68 }
69
70 pub async fn send(self) -> Result<Vec<MetaMarketPositionV1>, DataApiError> {
72 self.request.send().await
73 }
74}