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()
}
}