use bonfida_utils::BorshSize;
use borsh::{BorshDeserialize, BorshSerialize};
use bytemuck::{CheckedBitPattern, NoUninit};
use num_derive::{FromPrimitive, ToPrimitive};
pub use crate::state::orderbook::{OrderSummary, ORDER_SUMMARY_SIZE};
#[cfg(feature = "no-entrypoint")]
pub use crate::utils::get_spread;
pub mod critbit;
pub mod event_queue;
pub mod market_state;
pub mod orderbook;
#[derive(Copy, Clone, Debug, PartialEq)]
#[allow(missing_docs)]
#[repr(u8)]
pub enum AccountTag {
Uninitialized,
Market = 1 << 7,
EventQueue,
Bids,
Asks,
Disabled,
}
#[derive(
BorshDeserialize,
BorshSerialize,
Clone,
Copy,
PartialEq,
FromPrimitive,
ToPrimitive,
Debug,
BorshSize,
CheckedBitPattern,
NoUninit,
)]
#[repr(u8)]
#[allow(missing_docs)]
pub enum Side {
Bid,
Ask,
}
impl Side {
pub fn opposite(&self) -> Self {
match self {
Side::Bid => Side::Ask,
Side::Ask => Side::Bid,
}
}
}
#[derive(BorshDeserialize, BorshSerialize, Clone, PartialEq, FromPrimitive, BorshSize)]
pub enum SelfTradeBehavior {
DecrementTake,
CancelProvide,
AbortTransaction,
}
pub const ORDER_ID_SIDE_FLAG: u128 = 1 << 63;
pub fn get_side_from_order_id(order_id: u128) -> Side {
if ORDER_ID_SIDE_FLAG & order_id != 0 {
Side::Bid
} else {
Side::Ask
}
}