apple-quant-algorithmic 0.1.0

Apple Quant's algorithmic trading api
Documentation
use crate::{instrument::InstrumentSpec, price::BidAskPriceSpread};

mod cancel;
mod submit;

pub use cancel::*;
pub use submit::*;

use super::{
	OrderAction,
	client::{CancelClientOrder, SubmitClientOrder},
};

#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub enum RemoteOrderAction<IS: InstrumentSpec> {
	SubmitRemoteOrder(SubmitRemoteOrder<IS>),
	SubmitClientOrder(SubmitClientOrder<IS>),
	CancelRemoteOrder(CancelRemoteOrder),
	CancelClientOrder(CancelClientOrder),
}

impl<IS: InstrumentSpec> RemoteOrderAction<IS> {
	pub(crate) fn parent_processed(
		&mut self,
		bid_ask_price_spread: &BidAskPriceSpread<IS>,
	) {
		match self {
			Self::SubmitRemoteOrder(submit_remote_order) => {
				submit_remote_order.parent_processed(bid_ask_price_spread)
			}
			Self::SubmitClientOrder(submit_client_order) => {
				submit_client_order.parent_processed(bid_ask_price_spread)
			}
			_ => {}
		}
	}

	pub fn into_order_action(self) -> OrderAction<IS> {
		self.into()
	}
}