#[derive(Debug, thiserror::Error)]
pub enum AmmMathError {
#[error("tick {tick} out of range [-887272, 887272]")]
TickOutOfRange { tick: i32 },
#[error("sqrt_price_x96 out of range")]
SqrtPriceOutOfRange,
#[error("division by zero")]
DivisionByZero,
#[error("mul_div overflow")]
MulDivOverflow,
#[error("liquidity overflow: value exceeds u128")]
LiquidityOverflow,
#[error("sqrt price difference is zero")]
SqrtPriceDiffZero,
#[error("amount0 or amount1 must be non-zero for encode_sqrt_ratio")]
ZeroAmounts,
#[error("sqrt_price_x96 must be > 0")]
SqrtPriceZero,
#[error("liquidity must be > 0")]
LiquidityZero,
#[error("price computation underflow (subtracted amount exceeds available)")]
PriceUnderflow,
#[error("invalid fee_pips: must be < 1_000_000")]
InvalidFeePips,
}