use crate::{
instrument::InstrumentSpec,
liquidity::LiquidityEstimation,
price::AbsolutePrice,
volume::{DirectionalIntentVolume, DirectionlessVolume},
};
use thiserror::Error;
mod client;
pub mod dependency;
mod execution_expectation;
mod goal;
mod partial_fill;
mod remote;
mod state_update;
mod timing;
mod tracker;
pub use client::*;
pub use dependency::*;
pub use execution_expectation::*;
pub use goal::*;
pub use partial_fill::*;
pub use remote::*;
pub use state_update::*;
pub use timing::*;
pub use tracker::*;
#[derive(Debug, Error)]
pub enum DesiredVolumeOrderError {
#[error("Order does not have a visible volume desire.")]
DesireHidden,
}
pub trait DesiredVolumeOrder<IS: InstrumentSpec> {
fn desired_directionless_volume(
&self
) -> Result<&DirectionlessVolume<IS>, DesiredVolumeOrderError>;
fn desired_directional_intent_volume(
&self
) -> Result<DirectionalIntentVolume<IS>, DesiredVolumeOrderError>;
}
pub trait MatchableOrder<IS: InstrumentSpec> {
fn is_liquidable(
&self,
liquidity_estimation: &LiquidityEstimation<IS>,
) -> Option<AbsolutePrice<IS>>;
}