1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
//! Lobster implements a single-threaded order book. To use Lobster, create an //! order book instance with default parameters, and send orders for execution: //! //! ```rust //! use lobster::{FillMetadata, OrderBook, OrderEvent, OrderType, Side}; //! //! let mut ob = OrderBook::default(); //! let event = ob.execute(OrderType::Market { id: 0, qty: 1, side: Side::Bid }); //! assert_eq!(event, OrderEvent::Unfilled(0)); //! //! let event = ob.execute(OrderType::Limit { id: 1, price: 120, qty: 3, side: Side::Ask }); //! assert_eq!(event, OrderEvent::Placed(1)); //! //! let event = ob.execute(OrderType::Market { id: 2, qty: 4, side: Side::Bid }); //! assert_eq!( //! event, //! OrderEvent::PartiallyFilled { //! id: 2, //! filled_qty: 3, //! fills: vec![ //! FillMetadata { //! order_1: 2, //! order_2: 1, //! qty: 3, //! price: 120, //! } //! ], //! }, //! ); //! ``` //! //! Lobster only deals in integer price points and quantities. Prices and //! quantities are represented as unsigned 64-bit integers. If the traded //! instrument supports fractional prices and quantities, the conversion needs to //! be handled by the user. At this time, Lobster does not support negative prices. #![warn( missing_docs, missing_debug_implementations, intra_doc_link_resolution_failure )] mod arena; mod models; mod orderbook; pub use models::{ BookDepth, BookLevel, FillMetadata, OrderEvent, OrderType, Side, Trade, }; pub use orderbook::OrderBook;