use polyte_core::{QueryBuilder, Request};
use reqwest::Client;
use url::Url;
use crate::{error::GammaError, types::Market};
#[derive(Clone)]
pub struct Markets {
pub(crate) client: Client,
pub(crate) base_url: Url,
}
impl Markets {
pub fn get(&self, id: impl Into<String>) -> Request<Market, GammaError> {
Request::new(
self.client.clone(),
self.base_url.clone(),
format!("/markets/{}", urlencoding::encode(&id.into())),
)
}
pub fn get_by_slug(&self, slug: impl Into<String>) -> Request<Market, GammaError> {
Request::new(
self.client.clone(),
self.base_url.clone(),
format!("/markets/slug/{}", urlencoding::encode(&slug.into())),
)
}
pub fn list(&self) -> ListMarkets {
ListMarkets {
request: Request::new(self.client.clone(), self.base_url.clone(), "/markets"),
}
}
}
pub struct ListMarkets {
request: Request<Vec<Market>, GammaError>,
}
impl ListMarkets {
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 fn order(mut self, order: impl Into<String>) -> Self {
self.request = self.request.query("order", order.into());
self
}
pub fn ascending(mut self, ascending: bool) -> Self {
self.request = self.request.query("ascending", ascending);
self
}
pub fn id(mut self, ids: impl IntoIterator<Item = i64>) -> Self {
self.request = self.request.query_many("id", ids);
self
}
pub fn slug(mut self, slugs: impl IntoIterator<Item = impl ToString>) -> Self {
self.request = self.request.query_many("slug", slugs);
self
}
pub fn clob_token_ids(mut self, token_ids: impl IntoIterator<Item = impl ToString>) -> Self {
self.request = self.request.query_many("clob_token_ids", token_ids);
self
}
pub fn condition_ids(mut self, condition_ids: impl IntoIterator<Item = impl ToString>) -> Self {
self.request = self.request.query_many("condition_ids", condition_ids);
self
}
pub fn market_maker_address(
mut self,
addresses: impl IntoIterator<Item = impl ToString>,
) -> Self {
self.request = self.request.query_many("market_maker_address", addresses);
self
}
pub fn liquidity_num_min(mut self, min: f64) -> Self {
self.request = self.request.query("liquidity_num_min", min);
self
}
pub fn liquidity_num_max(mut self, max: f64) -> Self {
self.request = self.request.query("liquidity_num_max", max);
self
}
pub fn volume_num_min(mut self, min: f64) -> Self {
self.request = self.request.query("volume_num_min", min);
self
}
pub fn volume_num_max(mut self, max: f64) -> Self {
self.request = self.request.query("volume_num_max", max);
self
}
pub fn start_date_min(mut self, date: impl Into<String>) -> Self {
self.request = self.request.query("start_date_min", date.into());
self
}
pub fn start_date_max(mut self, date: impl Into<String>) -> Self {
self.request = self.request.query("start_date_max", date.into());
self
}
pub fn end_date_min(mut self, date: impl Into<String>) -> Self {
self.request = self.request.query("end_date_min", date.into());
self
}
pub fn end_date_max(mut self, date: impl Into<String>) -> Self {
self.request = self.request.query("end_date_max", date.into());
self
}
pub fn tag_id(mut self, tag_id: i64) -> Self {
self.request = self.request.query("tag_id", tag_id);
self
}
pub fn related_tags(mut self, include: bool) -> Self {
self.request = self.request.query("related_tags", include);
self
}
pub fn cyom(mut self, cyom: bool) -> Self {
self.request = self.request.query("cyom", cyom);
self
}
pub fn uma_resolution_status(mut self, status: impl Into<String>) -> Self {
self.request = self.request.query("uma_resolution_status", status.into());
self
}
pub fn game_id(mut self, game_id: impl Into<String>) -> Self {
self.request = self.request.query("game_id", game_id.into());
self
}
pub fn sports_market_types(mut self, types: impl IntoIterator<Item = impl ToString>) -> Self {
self.request = self.request.query_many("sports_market_types", types);
self
}
pub fn rewards_min_size(mut self, min: f64) -> Self {
self.request = self.request.query("rewards_min_size", min);
self
}
pub fn question_ids(mut self, question_ids: impl IntoIterator<Item = impl ToString>) -> Self {
self.request = self.request.query_many("question_ids", question_ids);
self
}
pub fn include_tag(mut self, include: bool) -> Self {
self.request = self.request.query("include_tag", include);
self
}
pub fn closed(mut self, closed: bool) -> Self {
self.request = self.request.query("closed", closed);
self
}
pub fn active(mut self, active: bool) -> Self {
self.request = self.request.query("closed", !active);
self
}
pub fn archived(mut self, archived: bool) -> Self {
self.request = self.request.query("archived", archived);
self
}
pub async fn send(self) -> crate::error::Result<Vec<Market>> {
self.request.send().await
}
}