use crate::order_helpers::Side;
pub const fn order_side(order_id: u128) -> Side {
if order_id < 0x8000_0000_0000_0000_0000_0000_0000_0000 {
Side::Ask
} else {
Side::Bid
}
}
pub const fn order_id(price: u64, counter: u64, side: Side) -> u128 {
match side {
Side::Ask => order_id_ask(price, counter),
Side::Bid => order_id_bid(price, counter),
}
}
pub const fn order_id_ask(price: u64, counter: u64) -> u128 {
(price as u128) << 64 | (counter as u128)
}
pub const fn order_id_bid(price: u64, counter: u64) -> u128 {
((price ^ 0xffff_ffff_ffff_ffff) as u128) << 64 | (counter as u128)
}
pub const fn price(order_id: u128) -> u64 {
match order_side(order_id) {
Side::Ask => price_ask(order_id),
Side::Bid => price_bid(order_id),
}
}
pub const fn price_ask(order_id: u128) -> u64 {
(order_id >> 64) as u64
}
pub const fn price_bid(order_id: u128) -> u64 {
((order_id >> 64) as u64) ^ 0xffff_ffff_ffff_ffff
}
pub const fn counter(order_id: u128) -> u64 {
(order_id & 0x0000_0000_0000_0000_ffff_ffff_ffff_ffff) as u64
}