Skip to main content

cow_orderbook/
lib.rs

1//! `cow-orderbook` — Layer 4 `CoW` Protocol orderbook API client for the `CoW` Protocol SDK.
2//!
3//! This crate provides the HTTP client ([`OrderBookApi`]) for interacting
4//! with the `CoW` Protocol orderbook REST API, plus all request/response
5//! types and quote-amount calculation helpers.
6//!
7//! # Submodules
8//!
9//! | Module | Purpose |
10//! |---|---|
11//! | [`api`] | [`OrderBookApi`] async HTTP client with typed endpoint methods |
12//! | [`types`] | Request/response structs (`OrderQuoteRequest`, `Order`, `Trade`, …) |
13//! | [`quote_amounts`] | Fee breakdown, slippage, and cost-stage calculations |
14//!
15//! # Quick start
16//!
17//! ```rust,no_run
18//! use cow_chains::{Env, SupportedChainId};
19//! use cow_orderbook::OrderBookApi;
20//!
21//! # async fn example() -> Result<(), Box<dyn std::error::Error>> {
22//! let api = OrderBookApi::new(SupportedChainId::Mainnet, Env::Prod);
23//! let version = api.get_version().await?;
24//! println!("orderbook version: {version}");
25//! # Ok(())
26//! # }
27//! ```
28
29#![cfg_attr(coverage_nightly, feature(coverage_attribute))]
30#![allow(unexpected_cfgs, reason = "`coverage_nightly` is set only by cargo-llvm-cov")]
31#![deny(unsafe_code)]
32#![warn(missing_docs)]
33// `generated.rs` is autogenerated OpenAPI code — exempt from some lints.
34#![allow(
35    clippy::missing_errors_doc,
36    clippy::missing_panics_doc,
37    clippy::doc_markdown,
38    reason = "progenitor-generated code does not satisfy workspace lints"
39)]
40
41pub mod api;
42pub mod client_trait;
43pub(crate) mod generated;
44pub mod quote_amounts;
45pub mod types;
46
47pub use client_trait::OrderbookClient;
48// Re-export the L3 rate limit primitives for backwards compatibility —
49// these types moved down to `cow-http`.
50pub use cow_http::{DEFAULT_RETRY_STATUS_CODES, RateLimiter, RetryPolicy, rate_limit};
51
52#[cfg(test)]
53mod wire_compat;
54
55pub use api::{OrderBookApi, mock_get_order, request};
56pub use quote_amounts::{
57    PartnerFeeResult, ProtocolFeeAmountParams, QuoteAmounts, QuoteAmountsAndCostsParams,
58    QuoteAmountsAndCostsResult, QuoteCosts, QuoteFeeComponent, QuoteNetworkFee, QuoteOrderParams,
59    get_protocol_fee_amount, get_quote_amounts_after_partner_fee, get_quote_amounts_after_slippage,
60    get_quote_amounts_and_costs, transform_order,
61};
62pub use types::{
63    AppDataObject, Auction, CompetitionAuction, CompetitionOrderStatus, CompetitionOrderStatusKind,
64    EthflowData, GetOrdersRequest, GetTradesRequest, InteractionData, OnchainOrderData, Order,
65    OrderCancellations, OrderClass, OrderCreation, OrderInteractions, OrderQuoteRequest,
66    OrderQuoteResponse, OrderStatus, OrderUid, QuoteData, QuoteSide, SolverCompetition,
67    SolverExecution, SolverSettlement, TotalSurplus, Trade, is_eth_flow_order,
68};