1use crate::order_helpers::Side;
2
3pub const fn order_side(order_id: u128) -> Side {
5 if order_id < 0x8000_0000_0000_0000_0000_0000_0000_0000 {
6 Side::Ask
7 } else {
8 Side::Bid
9 }
10}
11
12pub const fn order_id(price: u64, counter: u64, side: Side) -> u128 {
14 match side {
16 Side::Ask => order_id_ask(price, counter),
17 Side::Bid => order_id_bid(price, counter),
18 }
19}
20
21pub const fn order_id_ask(price: u64, counter: u64) -> u128 {
23 ((price as u128) << 64) | (counter as u128)
24}
25
26pub const fn order_id_bid(price: u64, counter: u64) -> u128 {
28 (((price ^ 0xffff_ffff_ffff_ffff) as u128) << 64) | (counter as u128)
29}
30
31pub const fn price(order_id: u128) -> u64 {
33 match order_side(order_id) {
34 Side::Ask => price_ask(order_id),
35 Side::Bid => price_bid(order_id),
36 }
37}
38
39pub const fn price_ask(order_id: u128) -> u64 {
41 (order_id >> 64) as u64
42}
43
44pub const fn price_bid(order_id: u128) -> u64 {
46 ((order_id >> 64) as u64) ^ 0xffff_ffff_ffff_ffff
47}
48
49pub const fn counter(order_id: u128) -> u64 {
51 (order_id & 0x0000_0000_0000_0000_ffff_ffff_ffff_ffff) as u64
52}