use crate::error::Result;
use crate::http::HttpClient;
use crate::request::GammaMarketParams;
use crate::types::{GammaCategory, GammaEvent, GammaMarket, GammaSeries, GammaTag};
pub struct GammaClient {
http_client: HttpClient,
}
impl GammaClient {
pub fn new(host: impl Into<String>) -> Self {
Self {
http_client: HttpClient::new(host),
}
}
pub async fn get_markets(
&self,
params: Option<GammaMarketParams>,
) -> Result<Vec<GammaMarket>> {
let mut path = "/markets".to_string();
if let Some(p) = params {
path.push_str(&p.to_query_string());
}
self.http_client.get(&path, None).await
}
pub async fn get_market(&self, condition_id: &str) -> Result<GammaMarket> {
let path = format!("/markets/{}", condition_id);
self.http_client.get(&path, None).await
}
pub async fn get_tags(&self) -> Result<Vec<GammaTag>> {
self.http_client.get("/tags", None).await
}
pub async fn get_categories(&self) -> Result<Vec<GammaCategory>> {
self.http_client.get("/categories", None).await
}
pub async fn get_market_by_id(&self, id: &str) -> Result<GammaMarket> {
let path = format!("/markets/{}", id);
self.http_client.get(&path, None).await
}
pub async fn get_events(&self) -> Result<Vec<GammaEvent>> {
self.http_client.get("/events", None).await
}
pub async fn get_event_by_id(&self, id: &str) -> Result<GammaEvent> {
let path = format!("/events/{}", id);
self.http_client.get(&path, None).await
}
pub async fn get_series(&self) -> Result<Vec<GammaSeries>> {
self.http_client.get("/series", None).await
}
pub async fn get_series_by_id(&self, id: &str) -> Result<GammaSeries> {
let path = format!("/series/{}", id);
self.http_client.get(&path, None).await
}
}