af_iperps/event_ext/
apply.rs1use crate::events;
4use crate::orderbook::Order;
5
6pub trait Apply<T> {
8 fn apply(&self, target: &mut T);
10}
11
12pub trait Orderbook {
18 fn insert_order(&mut self, order_id: u128, order: Order);
20
21 fn remove_order(&mut self, order_id: u128);
24
25 fn reduce_order_size(&mut self, order_id: u128, size_to_sub: u64);
28}
29
30impl<T: Orderbook> Apply<T> for events::OrderbookPostReceipt {
31 fn apply(&self, target: &mut T) {
32 let Self {
33 order_id,
34 order_size: size,
35 account_id,
36 ..
37 } = *self;
38 let order = Order { account_id, size };
39 target.insert_order(order_id, order);
40 }
41}
42
43impl<T: Orderbook> Apply<T> for events::CanceledOrder {
44 fn apply(&self, target: &mut T) {
45 let Self { order_id, .. } = *self;
46 target.remove_order(order_id);
47 }
48}
49
50impl<T: Orderbook> Apply<T> for events::FilledMakerOrder {
51 fn apply(&self, target: &mut T) {
52 let Self {
53 order_id,
54 filled_size,
55 remaining_size,
56 ..
57 } = *self;
58 if remaining_size > 0 {
59 target.reduce_order_size(order_id, filled_size)
60 } else {
61 target.remove_order(order_id);
62 }
63 }
64}