use tracing::info;
pub const DEFAULT_CHAIN_ID: u64 = 137; pub const DEFAULT_BASE_URL: &str = "https://clob.polymarket.com";
pub const DEFAULT_TIMEOUT_SECS: u64 = 30;
pub const DEFAULT_MAX_RETRIES: u32 = 3;
pub const DEFAULT_RATE_LIMIT_RPS: u32 = 100;
pub fn init() {
tracing_subscriber::fmt::init();
info!("Polyfill-rs initialized");
}
pub use crate::types::{
ApiCredentials,
ApiKeysResponse,
AssetType,
Balance,
BalanceAllowance,
BalanceAllowanceParams,
BatchMidpointRequest,
BatchMidpointResponse,
BatchPriceRequest,
BatchPriceResponse,
BookParams,
CancelOrdersResponse,
ClientConfig,
ClientResult,
ExtraOrderArgs,
ExtraOrderArgsV1,
FeeRateResponse,
FillEvent,
MakerOrder,
Market,
MarketSnapshot,
MarketsResponse,
MidpointResponse,
NegRiskResponse,
NotificationParams,
OpenOrder,
OpenOrderParams,
Order,
OrderBook,
OrderBookSummary,
OrderDelta,
OrderRequest,
OrderScoringResponse,
OrderStatus,
OrderSummary,
OrderType,
PostOrderResponse,
PriceHistoryPoint,
PriceResponse,
PricesHistoryInterval,
PricesHistoryResponse,
Rewards,
RfqApproveOrderResponse,
RfqCancelQuote,
RfqCancelRequest,
RfqCreateQuote,
RfqCreateQuoteResponse,
RfqCreateRequest,
RfqCreateRequestResponse,
RfqListResponse,
RfqOrderExecutionRequest,
RfqQuoteData,
RfqQuotesParams,
RfqRequestData,
RfqRequestsParams,
Side,
SimplifiedMarket,
SimplifiedMarketsResponse,
SpreadResponse,
StreamMessage,
TickSizeResponse,
Token,
TokenPrice,
TradeMessage,
TradeMessageStatus,
TradeMessageType,
TradeParams,
TradeResponse,
TraderSide,
WssAuth,
WssChannelType,
WssSubscription,
};
pub use crate::client::{ClobClient, PolyfillClient};
pub use crate::orders::{get_contract_config, get_v1_contract_config, OrderBuilder, SigType};
pub use alloy_primitives::Address;
pub use crate::client::OrderArgs;
pub use crate::errors::{PolyfillError, Result};
pub use crate::book::{OrderBook as OrderBookImpl, OrderBookManager};
pub use crate::decode::Decoder;
pub use crate::fill::{FillEngine, FillResult};
pub use crate::stream::{MarketStream, StreamManager, WebSocketBookApplier, WebSocketStream};
pub use crate::ws_hot_path::{WsBookApplyStats, WsBookUpdateProcessor};
pub use crate::utils::{crypto, math, rate_limit, retry, time, url};
pub mod auth;
pub mod book;
pub mod buffer_pool;
pub mod client;
pub mod connection_manager;
pub mod decode;
pub mod dns_cache;
pub mod errors;
pub mod fill;
pub mod http_config;
pub mod orders;
pub mod stream;
pub mod types;
pub mod utils;
pub mod ws_hot_path;
#[cfg(test)]
mod benches {
use crate::{OrderBookManager, OrderDelta, Side};
use chrono::Utc;
use criterion::{criterion_group, criterion_main};
use rust_decimal::Decimal;
use std::str::FromStr;
#[allow(dead_code)]
fn order_book_benchmark(c: &mut criterion::Criterion) {
let book_manager = OrderBookManager::new(100);
c.bench_function("apply_order_delta", |b| {
b.iter(|| {
let delta = OrderDelta {
token_id: "test_token".to_string(),
timestamp: Utc::now(),
side: Side::BUY,
price: Decimal::from_str("0.75").unwrap(),
size: Decimal::from_str("100.0").unwrap(),
sequence: 1,
};
let _ = book_manager.apply_delta(delta);
});
});
}
criterion_group!(benches, order_book_benchmark);
criterion_main!(benches);
}
#[cfg(test)]
mod tests {
use super::*;
use rust_decimal::Decimal;
use std::str::FromStr;
#[test]
fn test_client_creation() {
let _client = ClobClient::new("https://test.example.com");
}
#[test]
fn test_order_args_creation() {
let args = OrderArgs::new(
"test_token",
Decimal::from_str("0.75").unwrap(),
Decimal::from_str("100.0").unwrap(),
Side::BUY,
);
assert_eq!(args.token_id, "test_token");
assert_eq!(args.side, Side::BUY);
}
#[test]
fn test_order_args_default() {
let args = OrderArgs::default();
assert_eq!(args.token_id, "");
assert_eq!(args.price, Decimal::ZERO);
assert_eq!(args.size, Decimal::ZERO);
assert_eq!(args.side, Side::BUY);
}
}