phoenix/state/
trader_state.rs

1use 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}