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
//! 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 { id: 0 });
//!
//! let event = ob.execute(OrderType::Limit { id: 1, price: 120, qty: 3, side: Side::Ask });
//! assert_eq!(event, OrderEvent::Placed { id: 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,
//! taker_side: Side::Bid,
//! total_fill: true,
//! }
//! ],
//! },
//! );
//! ```
//!
//! 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.
pub use ;
pub use OrderBook;