use polyoxide_core::{HttpClient, QueryBuilder, Request};
use crate::{
error::DataApiError,
types::{PnlFidelity, PnlPoint},
};
#[derive(Clone)]
pub struct PnlApi {
pub(crate) http_client: HttpClient,
}
impl PnlApi {
pub fn history(&self, user_address: impl Into<String>) -> UserPnlRequest {
UserPnlRequest {
request: Request::new(self.http_client.clone(), "/user-pnl")
.query("user_address", user_address.into()),
}
}
}
pub struct UserPnlRequest {
request: Request<Vec<PnlPoint>, DataApiError>,
}
impl UserPnlRequest {
pub fn interval(mut self, interval: impl Into<String>) -> Self {
self.request = self.request.query("interval", interval.into());
self
}
pub fn fidelity(mut self, fidelity: PnlFidelity) -> Self {
self.request = self.request.query("fidelity", fidelity);
self
}
pub async fn send(self) -> Result<Vec<PnlPoint>, DataApiError> {
self.request.send().await
}
}