df_hyperliquid_core/trade/orders/
limit.rs1use crate::trade::error::TradeError;
5use crate::trade::orders::entry::{OrderIntent, Price};
6use crate::trade::orders::{Side, Tif};
7use crate::trade::ticket::{Amount, Refusal, positive};
8use crate::utils::Dec;
9use crate::utils::rounding::Grid;
10
11impl OrderIntent {
12 #[must_use]
13 pub const fn limit(side: Side, amount: Amount, price: Dec, tif: Tif) -> OrderIntent {
14 OrderIntent::at(side, amount, Price::Limit { price, tif })
15 }
16}
17
18pub(crate) fn resting(grid: Grid, price: Dec, tif: Tif, side: Side) -> Result<(Dec, Dec, Tif), Refusal> {
20 if matches!(tif, Tif::FrontendMarket) {
21 return Err(Refusal::MarketTif);
22 }
23 let price = limit_on(grid, price, side, "a price")?;
24 Ok((price, price, tif))
25}
26
27pub(crate) fn limit_on(grid: Grid, price: Dec, side: Side, what: &'static str) -> Result<Dec, Refusal> {
29 let price = positive(price, what)?;
30 grid.price(price, side).ok_or(Refusal::Trade(TradeError::NoPrice(price)))
31}
32
33#[cfg(test)]
34#[path = "tests/limit.rs"]
35mod tests;