perpl_sdk/state/l3_book/
level.rs1use fastnum::UD64;
4
5use crate::types;
6
7#[derive(Clone, derive_more::Debug, Default)]
12pub struct BookLevel {
13 head: Option<types::OrderId>,
15 tail: Option<types::OrderId>,
17 #[debug("{cached_size}")]
19 cached_size: UD64,
20 cached_count: u32,
22}
23
24impl BookLevel {
25 pub fn new() -> Self { Self::default() }
27
28 pub fn size(&self) -> UD64 { self.cached_size }
30
31 pub fn num_orders(&self) -> u32 { self.cached_count }
34
35 pub fn is_empty(&self) -> bool { self.head.is_none() }
37
38 pub(crate) fn head(&self) -> Option<types::OrderId> { self.head }
40
41 pub(crate) fn tail(&self) -> Option<types::OrderId> { self.tail }
43
44 pub(crate) fn set_head(&mut self, head: Option<types::OrderId>) { self.head = head; }
46
47 pub(crate) fn set_tail(&mut self, tail: Option<types::OrderId>) { self.tail = tail; }
49
50 pub(crate) fn add_size(&mut self, size: UD64) {
52 self.cached_size += size;
53 self.cached_count += 1;
54 }
55
56 pub(crate) fn sub_size(&mut self, size: UD64) {
58 self.cached_size -= size;
59 self.cached_count -= 1;
60 }
61
62 pub(crate) fn update_size(&mut self, old_size: UD64, new_size: UD64) {
64 self.cached_size -= old_size;
65 self.cached_size += new_size;
66 }
67}