use polyoxide_core::{HttpClient, QueryBuilder, Request};
use crate::{
error::DataApiError,
types::{MarketPositionSortBy, MarketPositionStatus, MetaMarketPositionV1, SortDirection},
};
#[derive(Clone)]
pub struct MarketPositionsApi {
pub(crate) http_client: HttpClient,
}
impl MarketPositionsApi {
pub fn list(&self, market: impl Into<String>) -> ListMarketPositions {
let mut request = Request::new(self.http_client.clone(), "/v1/market-positions");
request = request.query("market", market.into());
ListMarketPositions { request }
}
}
pub struct ListMarketPositions {
request: Request<Vec<MetaMarketPositionV1>, DataApiError>,
}
impl ListMarketPositions {
pub fn user(mut self, user_address: impl Into<String>) -> Self {
self.request = self.request.query("user", user_address.into());
self
}
pub fn status(mut self, status: MarketPositionStatus) -> Self {
self.request = self.request.query("status", status);
self
}
pub fn sort_by(mut self, sort_by: MarketPositionSortBy) -> Self {
self.request = self.request.query("sortBy", sort_by);
self
}
pub fn sort_direction(mut self, direction: SortDirection) -> Self {
self.request = self.request.query("sortDirection", direction);
self
}
pub fn limit(mut self, limit: u32) -> Self {
self.request = self.request.query("limit", limit);
self
}
pub fn offset(mut self, offset: u32) -> Self {
self.request = self.request.query("offset", offset);
self
}
pub async fn send(self) -> Result<Vec<MetaMarketPositionV1>, DataApiError> {
self.request.send().await
}
}