apple-quant-algorithmic 0.3.0

Apple Quant's algorithmic library.
mod cancel;
mod submit;

use std::ops::{Deref, DerefMut};

use crate::instrument::InstrumentSpec;

use super::{
	remote::{CancelRemoteOrder, SubmitRemoteOrder},
	OrderAction,
};

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

#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub struct ClientDeployedRemoteDependency<IS: InstrumentSpec>(SubmitRemoteOrder<IS>);

impl<IS: InstrumentSpec> ClientDeployedRemoteDependency<IS> {
	pub fn new(
		submit_remote_order: SubmitRemoteOrder<IS>,
	) -> Self {
		Self(submit_remote_order)
	}

	pub(crate) fn into_order_action(
		self,
	) -> OrderAction<IS> {
		self.0.into_order_action()
	}
}

impl<IS: InstrumentSpec> Deref for ClientDeployedRemoteDependency<IS> {
	type Target = SubmitRemoteOrder<IS>;

	fn deref(
		&self,
	) -> &Self::Target {
		&self.0
	}
}

impl<IS: InstrumentSpec> DerefMut for ClientDeployedRemoteDependency<IS> {
	fn deref_mut(
		&mut self,
	) -> &mut Self::Target {
		&mut self.0
	}
}

#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub struct ClientOrderAction<IS: InstrumentSpec>(OrderAction<IS>);

impl<IS: InstrumentSpec> ClientOrderAction<IS> {
	pub fn new(
		order_action: OrderAction<IS>,
	) -> Self {
		Self(order_action)
	}

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

impl<IS: InstrumentSpec> Deref for ClientOrderAction<IS> {
	type Target = OrderAction<IS>;

	fn deref(
		&self,
	) -> &Self::Target {
		&self.0
	}
}

impl<IS: InstrumentSpec> DerefMut for ClientOrderAction<IS> {
	fn deref_mut(
		&mut self,
	) -> &mut Self::Target {
		&mut self.0
	}
}