use df_hyperliquid_core::utils::Address;
use super::Refusal;
pub const MAX_LEVERAGE: u32 = 1000;
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct OpenPosition {
pub user: Address,
pub instrument_id: u32,
pub is_long: bool,
pub size: u128,
pub leverage: u32,
pub use_debt: bool,
pub nonce: u128,
pub deadline: u64,
}
impl OpenPosition {
#[allow(clippy::too_many_arguments)]
pub fn new(
user: Address,
instrument_id: u32,
is_long: bool,
size: u128,
leverage: u32,
use_debt: bool,
nonce: u128,
deadline: u64,
) -> Result<Self, Refusal> {
if leverage == 0 || leverage > MAX_LEVERAGE {
return Err(Refusal::Leverage(leverage));
}
if size == 0 {
return Err(Refusal::NoMargin);
}
Ok(OpenPosition { user, instrument_id, is_long, size, leverage, use_debt, nonce, deadline })
}
}