#[cfg(feature = "clob")]
pub use polyte_clob;
#[cfg(all(feature = "clob", feature = "gamma"))]
use polyte_clob::{Account, Chain, Clob, ClobBuilder};
#[cfg(feature = "data")]
pub use polyte_data;
#[cfg(feature = "gamma")]
pub use polyte_gamma;
#[cfg(all(feature = "clob", feature = "gamma"))]
use polyte_gamma::Gamma;
pub mod prelude {
#[cfg(feature = "ws")]
pub use polyte_clob::ws;
#[cfg(feature = "clob")]
pub use polyte_clob::{
Account, Chain, Clob, ClobBuilder, ClobError, CreateOrderParams, Credentials, OrderSide,
};
#[cfg(feature = "data")]
pub use polyte_data::{DataApi, DataApiError};
#[cfg(feature = "gamma")]
pub use polyte_gamma::{Gamma, GammaError};
#[cfg(all(feature = "clob", feature = "gamma", feature = "data"))]
pub use crate::{Polymarket, PolymarketBuilder, PolymarketError};
}
#[derive(Debug, thiserror::Error)]
pub enum PolymarketError {
#[cfg(feature = "clob")]
#[error("CLOB error: {0}")]
Clob(#[from] polyte_clob::ClobError),
#[cfg(feature = "data")]
#[error("Data error: {0}")]
Data(#[from] polyte_data::DataApiError),
#[cfg(feature = "gamma")]
#[error("Gamma error: {0}")]
Gamma(#[from] polyte_gamma::GammaError),
#[error("Configuration error: {0}")]
Config(String),
}
#[cfg(all(feature = "clob", feature = "gamma"))]
#[derive(Clone)]
pub struct Polymarket {
pub clob: Clob,
pub gamma: Gamma,
}
#[cfg(all(feature = "clob", feature = "gamma"))]
impl Polymarket {
pub fn new(account: Account) -> Result<Self, PolymarketError> {
PolymarketBuilder::new(account).build()
}
pub fn builder(account: Account) -> PolymarketBuilder {
PolymarketBuilder::new(account)
}
}
#[cfg(all(feature = "clob", feature = "gamma"))]
pub struct PolymarketBuilder {
clob_base_url: Option<String>,
gamma_base_url: Option<String>,
timeout_ms: Option<u64>,
chain: Option<Chain>,
account: Account,
}
#[cfg(all(feature = "clob", feature = "gamma"))]
impl PolymarketBuilder {
fn new(account: Account) -> Self {
Self {
clob_base_url: None,
gamma_base_url: None,
timeout_ms: None,
chain: None,
account,
}
}
pub fn clob_base_url(mut self, url: impl Into<String>) -> Self {
self.clob_base_url = Some(url.into());
self
}
pub fn gamma_base_url(mut self, url: impl Into<String>) -> Self {
self.gamma_base_url = Some(url.into());
self
}
pub fn timeout_ms(mut self, timeout: u64) -> Self {
self.timeout_ms = Some(timeout);
self
}
pub fn chain(mut self, chain: Chain) -> Self {
self.chain = Some(chain);
self
}
pub fn build(self) -> Result<Polymarket, PolymarketError> {
let mut gamma_builder = Gamma::builder();
if let Some(url) = self.gamma_base_url {
gamma_builder = gamma_builder.base_url(url);
}
if let Some(timeout) = self.timeout_ms {
gamma_builder = gamma_builder.timeout_ms(timeout);
}
let gamma = gamma_builder.build()?;
let mut clob_builder = ClobBuilder::new(self.account);
if let Some(url) = self.clob_base_url {
clob_builder = clob_builder.base_url(url);
}
if let Some(timeout) = self.timeout_ms {
clob_builder = clob_builder.timeout_ms(timeout);
}
if let Some(chain) = self.chain {
clob_builder = clob_builder.chain(chain);
}
let clob = clob_builder.build()?;
Ok(Polymarket { clob, gamma })
}
}