phoenix/state/
trader_state.rs1use crate::quantities::{BaseLots, QuoteLots};
2use bytemuck::{Pod, Zeroable};
3
4#[repr(C)]
5#[derive(Default, Debug, Copy, Clone, PartialEq, Eq, Zeroable, Pod)]
6pub struct TraderState {
7 pub quote_lots_locked: QuoteLots,
8 pub quote_lots_free: QuoteLots,
9 pub base_lots_locked: BaseLots,
10 pub base_lots_free: BaseLots,
11 _padding: [u64; 8],
12}
13
14impl TraderState {
15 #[inline(always)]
16 pub(crate) fn unlock_quote_lots(&mut self, quote_lots: QuoteLots) {
17 self.quote_lots_locked -= quote_lots;
18 self.quote_lots_free += quote_lots;
19 }
20
21 #[inline(always)]
22 pub(crate) fn unlock_base_lots(&mut self, base_lots: BaseLots) {
23 self.base_lots_locked -= base_lots;
24 self.base_lots_free += base_lots;
25 }
26
27 #[inline(always)]
28 pub(crate) fn process_limit_sell(
29 &mut self,
30 base_lots_removed: BaseLots,
31 quote_lots_received: QuoteLots,
32 ) {
33 self.base_lots_locked -= base_lots_removed;
34 self.quote_lots_free += quote_lots_received;
35 }
36
37 #[inline(always)]
38 pub(crate) fn process_limit_buy(
39 &mut self,
40 quote_lots_removed: QuoteLots,
41 base_lots_received: BaseLots,
42 ) {
43 self.quote_lots_locked -= quote_lots_removed;
44 self.base_lots_free += base_lots_received;
45 }
46
47 #[inline(always)]
48 pub(crate) fn lock_quote_lots(&mut self, quote_lots: QuoteLots) {
49 self.quote_lots_locked += quote_lots;
50 }
51
52 #[inline(always)]
53 pub(crate) fn lock_base_lots(&mut self, base_lots: BaseLots) {
54 self.base_lots_locked += base_lots;
55 }
56
57 #[inline(always)]
58 pub(crate) fn use_free_quote_lots(&mut self, quote_lots: QuoteLots) {
59 self.quote_lots_free -= quote_lots;
60 }
61
62 #[inline(always)]
63 pub(crate) fn use_free_base_lots(&mut self, base_lots: BaseLots) {
64 self.base_lots_free -= base_lots;
65 }
66
67 #[inline(always)]
68 pub(crate) fn deposit_free_quote_lots(&mut self, quote_lots: QuoteLots) {
69 self.quote_lots_free += quote_lots;
70 }
71
72 #[inline(always)]
73 pub(crate) fn deposit_free_base_lots(&mut self, base_lots: BaseLots) {
74 self.base_lots_free += base_lots;
75 }
76}