diff --git a/lazer/sdk/rust/protocol/src/router.rs b/lazer/sdk/rust/protocol/src/router.rs index 947ee0ba4f..6ed1c83676 100644 --- a/lazer/sdk/rust/protocol/src/router.rs +++ b/lazer/sdk/rust/protocol/src/router.rs @@ -8,7 +8,7 @@ use { serde::{de::Error, Deserialize, Serialize}, std::{ num::NonZeroI64, - ops::{Add, Deref, DerefMut, Div, Sub}, + ops::{Add, Deref, DerefMut, Div, Mul, Sub}, time::{SystemTime, UNIX_EPOCH}, }, }; @@ -121,6 +121,21 @@ impl Div for Price { } } +impl Mul for Price { + type Output = Option; + fn mul(self, rhs: Price) -> Self::Output { + let left_value = i128::from(self.0.get()); + let right_value = i128::from(rhs.0.get()); + + let value = left_value * right_value / 10i128.pow(Price::TMP_EXPONENT); + let value = match value.try_into() { + Ok(value) => value, + Err(_) => return None, + }; + NonZeroI64::new(value).map(Self) + } +} + #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub enum PriceFeedProperty {