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::PostedOrder {
31 fn apply(&self, target: &mut T) {
32 let Self {
33 order_id,
34 order_size: size,
35 account_id,
36 reduce_only,
37 expiration_timestamp_ms,
38 ..
39 } = *self;
40 let order = Order {
41 account_id,
42 size,
43 reduce_only,
44 expiration_timestamp_ms,
45 };
46 target.insert_order(order_id, order);
47 }
48}
49
50impl<T: Orderbook> Apply<T> for events::CanceledOrder {
51 fn apply(&self, target: &mut T) {
52 let Self { order_id, .. } = *self;
53 target.remove_order(order_id);
54 }
55}
56
57impl<T: Orderbook> Apply<T> for events::FilledMakerOrder {
58 fn apply(&self, target: &mut T) {
59 let Self {
60 order_id,
61 filled_size,
62 remaining_size,
63 ..
64 } = *self;
65 if remaining_size > 0 {
66 target.reduce_order_size(order_id, filled_size)
67 } else {
68 target.remove_order(order_id);
69 }
70 }
71}