diff --git a/units/src/fee_rate.rs b/units/src/fee_rate.rs index 595e5e6a3..8c89cea64 100644 --- a/units/src/fee_rate.rs +++ b/units/src/fee_rate.rs @@ -3,7 +3,7 @@ //! Implements `FeeRate` and assoctiated features. use core::fmt; -use core::ops::{Add, Sub, Div, Mul, AddAssign}; +use core::ops::{Add, Sub, Div, Mul, AddAssign, SubAssign}; #[cfg(feature = "arbitrary")] use arbitrary::{Arbitrary, Unstructured}; @@ -224,6 +224,14 @@ impl AddAssign<&FeeRate> for FeeRate { fn add_assign(&mut self, rhs: &FeeRate) { self.0 += rhs.0 } } +impl SubAssign for FeeRate { + fn sub_assign(&mut self, rhs: Self) { self.0 -= rhs.0 } +} + +impl SubAssign<&FeeRate> for FeeRate { + fn sub_assign(&mut self, rhs: &FeeRate) { self.0 -= rhs.0 } +} + crate::impl_parse_str_from_int_infallible!(FeeRate, u64, from_sat_per_kwu); #[cfg(test)] @@ -267,6 +275,17 @@ mod tests { assert_eq!(f, FeeRate(3)); } + #[test] + fn sub_assign() { + let mut f = FeeRate(3); + f -= FeeRate(2); + assert_eq!(f, FeeRate(1)); + + let mut f = FeeRate(3); + f -= &FeeRate(2); + assert_eq!(f, FeeRate(1)); + } + #[test] fn fee_rate_const_test() { assert_eq!(0, FeeRate::ZERO.to_sat_per_kwu());