apple-quant-algorithmic 0.4.0

Apple Quant's algorithmic library.
Documentation
use crate::{
	order::{
		builder::dependency::{OrderBuilderDependencies, OrderBuilderDependency},
		ClientTimingCondition, OrderAction, RemoteTimingCondition, TimingCondition,
	},
	instrument::InstrumentSpec, volume::ExposureReversion,
};

use super::FillPolicy;

#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct CancelAllChildren(pub ExposureReversion);

impl FillPolicy for CancelAllChildren {
	fn build_remote<
		IS: InstrumentSpec,
		const INLINE_LEN: usize,
	>(
		&self,
		dependency: &OrderBuilderDependency<IS>,
		dependencies: &OrderBuilderDependencies<IS, INLINE_LEN>,
	) -> Vec<(
		RemoteTimingCondition,
		OrderAction<IS>,
	)> {
		dependencies
			.iter()
			.filter_map(move |
				iter_dependency,
			| {
				if iter_dependency.as_local_order_id() == dependency.as_local_order_id() {
					return None;
				}

				let order_action = iter_dependency.create_cancel_order_action(
					self.0.is_enabled(),
				);

				let timing_condition = RemoteTimingCondition::FullyFilled;

				Some((timing_condition, order_action))
			}).collect()
	}

	fn build_client<
		IS: InstrumentSpec,
		const INLINE_LEN: usize,
	>(
		&self,
		dependency: &OrderBuilderDependency<IS>,
		dependencies: &OrderBuilderDependencies<IS, INLINE_LEN>,
	) -> Vec<(
		TimingCondition,
		OrderAction<IS>,
	)> {
		dependencies
			.iter()
			.filter_map(move |
				iter_dependency,
			| {
				if iter_dependency.as_local_order_id() == dependency.as_local_order_id() {
					return None;
				}

				let order_action = iter_dependency.create_cancel_order_action(
					self.0.is_enabled(),
				);

				let timing_condition = TimingCondition::Client(
					ClientTimingCondition::Activated,
				);

				Some((timing_condition, order_action))
			}).collect()
	}
}