apple-quant-algorithmic 0.3.0

Apple Quant's algorithmic library.
mod cancel_all_children;
mod nothing;

use enum_dispatch::enum_dispatch;

use crate::{
	order::{OrderAction, RemoteTimingCondition, TimingCondition},
	instrument::InstrumentSpec,
};

use super::dependency::{OrderBuilderDependencies, OrderBuilderDependency};

pub use cancel_all_children::*;
pub use nothing::*;

#[enum_dispatch]
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub enum FillPolicyEnum {
	Nothing,
	CancelAllChildren,
}

impl AsRef<Self> for FillPolicyEnum {
	fn as_ref(
		&self,
	) -> &Self {
		self
	}
}

#[enum_dispatch(FillPolicyEnum)]
pub trait FillPolicy: Clone {
	fn build_remote<
		IS: InstrumentSpec,
		const INLINE_LEN: usize,
	>(
		&self,
		dependency: &OrderBuilderDependency<IS>,
		dependencies: &OrderBuilderDependencies<IS, INLINE_LEN>,
	) -> Vec<(
		RemoteTimingCondition,
		OrderAction<IS>,
	)>;

	fn build_client<
		IS: InstrumentSpec,
		const INLINE_LEN: usize,
	>(
		&self,
		dependency: &OrderBuilderDependency<IS>,
		dependencies: &OrderBuilderDependencies<IS, INLINE_LEN>,
	) -> Vec<(
		TimingCondition,
		OrderAction<IS>,
	)>;
}