scope/market/mod.rs
1//! # Market Module
2//!
3//! Provides peg and order book health analysis for stablecoin markets.
4//! Uses a **data-driven architecture**: exchange behaviour is described by YAML
5//! venue descriptors (see `venues/` directory). A `VenueRegistry` loads all
6//! descriptors and creates generic `ExchangeClient` instances at runtime, so
7//! new venues can be added without code changes.
8//!
9//! ## Supported Venues
10//!
11//! Built-in CEX descriptors: Binance, MEXC, Bitget, Gate.io, Bybit, OKX,
12//! Coinbase, Kraken, HTX, Crypto.com, and Biconomy. DEX data (Ethereum, Solana)
13//! is synthesized from DexScreener liquidity.
14//!
15//! ## Usage
16//!
17//! ```rust,no_run
18//! use scope::market::{VenueRegistry, HealthThresholds, MarketSummary};
19//!
20//! #[tokio::main]
21//! async fn main() -> scope::Result<()> {
22//! let registry = VenueRegistry::load()?;
23//! let exchange = registry.create_exchange_client("binance")?;
24//! let pair = exchange.format_pair("USDC");
25//! let book = exchange.fetch_order_book(&pair).await?;
26//! let summary = MarketSummary::from_order_book(&book, 1.0, &HealthThresholds::default(), None);
27//! print!("{}", summary.format_text(Some("binance")));
28//! Ok(())
29//! }
30//! ```
31
32// Submodules (split from the original monolithic orderbook.rs)
33pub mod analytics;
34pub mod health;
35pub mod traits;
36pub mod types;
37
38// Data-driven venue system
39pub mod configurable_client;
40pub mod descriptor;
41pub mod exchange;
42pub mod registry;
43
44// Backward-compatible re-export shim (allows `use crate::market::OrderBook` etc.)
45mod orderbook;
46
47pub use configurable_client::ConfigurableExchangeClient;
48pub use descriptor::VenueDescriptor;
49pub use exchange::ExchangeClient;
50pub use orderbook::{
51 ExecutionEstimate, ExecutionSide, HealthCheck, HealthThresholds, MarketSnapshot, MarketSummary,
52 OrderBook, OrderBookClient, OrderBookLevel, Ticker, TickerClient, Trade, TradeHistoryClient,
53 TradeSide, order_book_from_analytics,
54};
55pub use registry::VenueRegistry;