apple-quant-algorithmic 0.3.0

Apple Quant's algorithmic library.
use crate::instrument::InstrumentSpec;

use super::{AbsolutePrice, RelativePrice};

#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum ProtoabsolutePrice<IS: InstrumentSpec> {
	Absolute(AbsolutePrice<IS>),
	Relative(RelativePrice),
}

impl<IS: InstrumentSpec> ProtoabsolutePrice<IS> {
	pub fn as_absolute(
		&self,
	) -> Option<&AbsolutePrice<IS>> {
		self.into()
	}

	pub fn into_absolute(
		self,
	) -> Option<AbsolutePrice<IS>> {
		self.into()
	}

	pub fn as_relative(
		&self,
	) -> Option<&RelativePrice> {
		self.into()
	}

	pub fn into_relative(
		self,
	) -> Option<RelativePrice> {
		self.into()
	}
}

impl<IS: InstrumentSpec> From<AbsolutePrice<IS>> for ProtoabsolutePrice<IS> {
	fn from(
		value: AbsolutePrice<IS>,
	) -> Self {
		Self::Absolute(value)
	}
}

impl<IS: InstrumentSpec> From<&AbsolutePrice<IS>> for ProtoabsolutePrice<IS> {
	fn from(
		value: &AbsolutePrice<IS>,
	) -> Self {
		(*value).into()
	}
}

impl<IS: InstrumentSpec> From<RelativePrice> for ProtoabsolutePrice<IS> {
	fn from(
		value: RelativePrice,
	) -> Self {
		Self::Relative(value)
	}
}

impl<IS: InstrumentSpec> From<&RelativePrice> for ProtoabsolutePrice<IS> {
	fn from(
		value: &RelativePrice,
	) -> Self {
		(*value).into()
	}
}