pub enum NumOpResult<T> {
Valid(T),
Error(NumOpError),
}Expand description
Result of a mathematical operation on two numeric types.
In order to prevent overflow we provide a custom result type that is similar to the normal
core::result::Result but implements mathematical operations (e.g. core::ops::Add) so that
math operations can be chained ergonomically. This is very similar to how NaN works.
NumOpResult is a monadic type that contains Valid and Error (similar to Ok and Err).
It supports a subset of functions similar to Result (e.g. unwrap).
§Examples
The NumOpResult type provides protection against overflow and div-by-zero.
§Overflow protection
// Example UTXO value.
let a1 = Amount::from_sat(1_000_000)?;
// And another value from some other UTXO.
let a2 = Amount::from_sat(765_432)?;
// Just an example (typically one would calculate fee using weight and fee rate).
let fee = Amount::from_sat(1_00)?;
// The amount we want to send.
let spend = Amount::from_sat(1_200_000)?;
// We can error if the change calculation overflows.
//
// For example if the `spend` value comes from the user and the `change` value is later
// used then overflow here could be an attack vector.
let _change = (a1 + a2 - spend - fee).into_result().expect("handle this error");
// Or if we control all the values and know they are sane we can just `unwrap`.
let _change = (a1 + a2 - spend - fee).unwrap();
// `NumOpResult` also implements `expect`.
let _change = (a1 + a2 - spend - fee).expect("we know values don't overflow");§Divide-by-zero (overflow in Div or Rem)
In some instances one may wish to differentiate div-by-zero from overflow.
// Two amounts that will be added to calculate the max fee.
let a = Amount::from_sat(123).expect("valid amount");
let b = Amount::from_sat(467).expect("valid amount");
// Fee rate for transaction.
let fee_rate = FeeRate::from_sat_per_vb(1);
// Somewhat contrived example to show addition operator chained with division.
let max_fee = a + b;
let _fee = match max_fee / fee_rate {
NumOpResult::Valid(fee) => fee,
NumOpResult::Error(e) if e.is_div_by_zero() => {
// Do something when div by zero.
return Err(e);
},
NumOpResult::Error(e) => {
// We separate div-by-zero from overflow in case it needs to be handled separately.
//
// This branch could be hit since `max_fee` came from some previous calculation. And if
// an input to that calculation was from the user then overflow could be an attack vector.
return Err(e);
}
};Variants§
Valid(T)
Result of a successful mathematical operation.
Error(NumOpError)
Result of an unsuccessful mathematical operation.
Implementations§
Source§impl<T> NumOpResult<T>
impl<T> NumOpResult<T>
Sourcepub fn map<U, F>(self, op: F) -> NumOpResult<U>where
F: FnOnce(T) -> U,
pub fn map<U, F>(self, op: F) -> NumOpResult<U>where
F: FnOnce(T) -> U,
Maps a NumOpResult<T> to NumOpResult<U> by applying a function to a
contained NumOpResult::Valid value, leaving a NumOpResult::Error value untouched.
Source§impl<T> NumOpResult<T>where
T: Debug,
impl<T> NumOpResult<T>where
T: Debug,
Sourcepub fn expect(self, msg: &str) -> T
pub fn expect(self, msg: &str) -> T
Returns the contained valid numeric type, consuming self.
§Panics
Panics with msg if the numeric result is an Error.
Sourcepub fn unwrap(self) -> T
pub fn unwrap(self) -> T
Returns the contained valid numeric type, consuming self.
§Panics
Panics if the numeric result is an Error.
Sourcepub fn unwrap_err(self) -> NumOpError
pub fn unwrap_err(self) -> NumOpError
Sourcepub fn unwrap_or(self, default: T) -> T
pub fn unwrap_or(self, default: T) -> T
Returns the contained Some value or a provided default.
Arguments passed to unwrap_or are eagerly evaluated; if you are passing the result of a
function call, it is recommended to use unwrap_or_else, which is lazily evaluated.
Sourcepub fn unwrap_or_else<F>(self, f: F) -> Twhere
F: FnOnce() -> T,
pub fn unwrap_or_else<F>(self, f: F) -> Twhere
F: FnOnce() -> T,
Returns the contained Some value or computes it from a closure.
Sourcepub fn into_result(self) -> Result<T, NumOpError>
pub fn into_result(self) -> Result<T, NumOpError>
Converts this NumOpResult to a Result<T, NumOpError>.
Sourcepub fn and_then<F>(self, op: F) -> NumOpResult<T>where
F: FnOnce(T) -> NumOpResult<T>,
pub fn and_then<F>(self, op: F) -> NumOpResult<T>where
F: FnOnce(T) -> NumOpResult<T>,
Calls op if the numeric result is Valid, otherwise returns the Error value of self.
Trait Implementations§
Source§impl<'a> Add<&'a NumOpResult<SignedAmount>> for &SignedAmount
impl<'a> Add<&'a NumOpResult<SignedAmount>> for &SignedAmount
Source§type Output = <SignedAmount as Add<NumOpResult<SignedAmount>>>::Output
type Output = <SignedAmount as Add<NumOpResult<SignedAmount>>>::Output
+ operator.Source§fn add(
self,
rhs: &NumOpResult<SignedAmount>,
) -> <&SignedAmount as Add<&'a NumOpResult<SignedAmount>>>::Output
fn add( self, rhs: &NumOpResult<SignedAmount>, ) -> <&SignedAmount as Add<&'a NumOpResult<SignedAmount>>>::Output
+ operation. Read moreSource§impl Add<&NumOpResult<SignedAmount>> for SignedAmount
impl Add<&NumOpResult<SignedAmount>> for SignedAmount
Source§type Output = <SignedAmount as Add<NumOpResult<SignedAmount>>>::Output
type Output = <SignedAmount as Add<NumOpResult<SignedAmount>>>::Output
+ operator.Source§fn add(
self,
rhs: &NumOpResult<SignedAmount>,
) -> <SignedAmount as Add<&NumOpResult<SignedAmount>>>::Output
fn add( self, rhs: &NumOpResult<SignedAmount>, ) -> <SignedAmount as Add<&NumOpResult<SignedAmount>>>::Output
+ operation. Read moreSource§impl<'a, T> Add<&'a NumOpResult<T>> for &NumOpResult<T>
impl<'a, T> Add<&'a NumOpResult<T>> for &NumOpResult<T>
Source§type Output = <NumOpResult<T> as Add>::Output
type Output = <NumOpResult<T> as Add>::Output
+ operator.Source§fn add(
self,
rhs: &NumOpResult<T>,
) -> <&NumOpResult<T> as Add<&'a NumOpResult<T>>>::Output
fn add( self, rhs: &NumOpResult<T>, ) -> <&NumOpResult<T> as Add<&'a NumOpResult<T>>>::Output
+ operation. Read moreSource§impl<T> Add<&NumOpResult<T>> for NumOpResult<T>
impl<T> Add<&NumOpResult<T>> for NumOpResult<T>
Source§type Output = <NumOpResult<T> as Add>::Output
type Output = <NumOpResult<T> as Add>::Output
+ operator.Source§fn add(
self,
rhs: &NumOpResult<T>,
) -> <NumOpResult<T> as Add<&NumOpResult<T>>>::Output
fn add( self, rhs: &NumOpResult<T>, ) -> <NumOpResult<T> as Add<&NumOpResult<T>>>::Output
+ operation. Read moreSource§impl<'a, T> Add<&'a T> for &NumOpResult<T>
impl<'a, T> Add<&'a T> for &NumOpResult<T>
Source§impl<T> Add<&T> for NumOpResult<T>
impl<T> Add<&T> for NumOpResult<T>
Source§impl Add<NumOpResult<SignedAmount>> for &SignedAmount
impl Add<NumOpResult<SignedAmount>> for &SignedAmount
Source§type Output = <SignedAmount as Add<NumOpResult<SignedAmount>>>::Output
type Output = <SignedAmount as Add<NumOpResult<SignedAmount>>>::Output
+ operator.Source§fn add(
self,
rhs: NumOpResult<SignedAmount>,
) -> <&SignedAmount as Add<NumOpResult<SignedAmount>>>::Output
fn add( self, rhs: NumOpResult<SignedAmount>, ) -> <&SignedAmount as Add<NumOpResult<SignedAmount>>>::Output
+ operation. Read moreSource§impl Add<NumOpResult<SignedAmount>> for SignedAmount
impl Add<NumOpResult<SignedAmount>> for SignedAmount
Source§type Output = NumOpResult<SignedAmount>
type Output = NumOpResult<SignedAmount>
+ operator.Source§fn add(
self,
rhs: NumOpResult<SignedAmount>,
) -> <SignedAmount as Add<NumOpResult<SignedAmount>>>::Output
fn add( self, rhs: NumOpResult<SignedAmount>, ) -> <SignedAmount as Add<NumOpResult<SignedAmount>>>::Output
+ operation. Read moreSource§impl<T> Add<NumOpResult<T>> for &NumOpResult<T>
impl<T> Add<NumOpResult<T>> for &NumOpResult<T>
Source§type Output = <NumOpResult<T> as Add>::Output
type Output = <NumOpResult<T> as Add>::Output
+ operator.Source§fn add(
self,
rhs: NumOpResult<T>,
) -> <&NumOpResult<T> as Add<NumOpResult<T>>>::Output
fn add( self, rhs: NumOpResult<T>, ) -> <&NumOpResult<T> as Add<NumOpResult<T>>>::Output
+ operation. Read moreSource§impl<T> Add<T> for &NumOpResult<T>
impl<T> Add<T> for &NumOpResult<T>
Source§impl<T> Add<T> for NumOpResult<T>
impl<T> Add<T> for NumOpResult<T>
Source§impl<T> Add for NumOpResult<T>
impl<T> Add for NumOpResult<T>
Source§type Output = NumOpResult<T>
type Output = NumOpResult<T>
+ operator.Source§fn add(self, rhs: NumOpResult<T>) -> <NumOpResult<T> as Add>::Output
fn add(self, rhs: NumOpResult<T>) -> <NumOpResult<T> as Add>::Output
+ operation. Read moreSource§impl AddAssign<Amount> for NumOpResult<Amount>
impl AddAssign<Amount> for NumOpResult<Amount>
Source§fn add_assign(&mut self, rhs: Amount)
fn add_assign(&mut self, rhs: Amount)
+= operation. Read moreSource§impl AddAssign<SignedAmount> for NumOpResult<SignedAmount>
impl AddAssign<SignedAmount> for NumOpResult<SignedAmount>
Source§fn add_assign(&mut self, rhs: SignedAmount)
fn add_assign(&mut self, rhs: SignedAmount)
+= operation. Read moreSource§impl<T> AddAssign<T> for NumOpResult<T>where
T: AddAssign,
impl<T> AddAssign<T> for NumOpResult<T>where
T: AddAssign,
Source§fn add_assign(&mut self, rhs: T)
fn add_assign(&mut self, rhs: T)
+= operation. Read moreSource§impl AddAssign for NumOpResult<Amount>
impl AddAssign for NumOpResult<Amount>
Source§fn add_assign(&mut self, rhs: NumOpResult<Amount>)
fn add_assign(&mut self, rhs: NumOpResult<Amount>)
+= operation. Read moreSource§impl AddAssign for NumOpResult<SignedAmount>
impl AddAssign for NumOpResult<SignedAmount>
Source§fn add_assign(&mut self, rhs: NumOpResult<SignedAmount>)
fn add_assign(&mut self, rhs: NumOpResult<SignedAmount>)
+= operation. Read moreSource§impl<T> AddAssign for NumOpResult<T>
impl<T> AddAssign for NumOpResult<T>
Source§fn add_assign(&mut self, rhs: NumOpResult<T>)
fn add_assign(&mut self, rhs: NumOpResult<T>)
+= operation. Read moreSource§impl<'a, T> Arbitrary<'a> for NumOpResult<T>where
T: Arbitrary<'a>,
Available on crate feature arbitrary only.
impl<'a, T> Arbitrary<'a> for NumOpResult<T>where
T: Arbitrary<'a>,
arbitrary only.Source§fn arbitrary(u: &mut Unstructured<'a>) -> Result<NumOpResult<T>, Error>
fn arbitrary(u: &mut Unstructured<'a>) -> Result<NumOpResult<T>, Error>
Self from the given unstructured data. Read moreSource§fn arbitrary_take_rest(u: Unstructured<'a>) -> Result<Self, Error>
fn arbitrary_take_rest(u: Unstructured<'a>) -> Result<Self, Error>
Self from the entirety of the given
unstructured data. Read moreSource§fn size_hint(depth: usize) -> (usize, Option<usize>)
fn size_hint(depth: usize) -> (usize, Option<usize>)
Unstructured this type
needs to construct itself. Read moreSource§fn try_size_hint(
depth: usize,
) -> Result<(usize, Option<usize>), MaxRecursionReached>
fn try_size_hint( depth: usize, ) -> Result<(usize, Option<usize>), MaxRecursionReached>
Unstructured this type
needs to construct itself. Read moreSource§impl<T> Clone for NumOpResult<T>where
T: Clone,
impl<T> Clone for NumOpResult<T>where
T: Clone,
Source§fn clone(&self) -> NumOpResult<T>
fn clone(&self) -> NumOpResult<T>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl<T> Debug for NumOpResult<T>where
T: Debug,
impl<T> Debug for NumOpResult<T>where
T: Debug,
Source§impl<'a> Div<&'a NumOpResult<FeeRate>> for &NumOpResult<Amount>
impl<'a> Div<&'a NumOpResult<FeeRate>> for &NumOpResult<Amount>
Source§type Output = <NumOpResult<Amount> as Div<NumOpResult<FeeRate>>>::Output
type Output = <NumOpResult<Amount> as Div<NumOpResult<FeeRate>>>::Output
/ operator.Source§fn div(
self,
rhs: &NumOpResult<FeeRate>,
) -> <&NumOpResult<Amount> as Div<&'a NumOpResult<FeeRate>>>::Output
fn div( self, rhs: &NumOpResult<FeeRate>, ) -> <&NumOpResult<Amount> as Div<&'a NumOpResult<FeeRate>>>::Output
/ operation. Read moreSource§impl Div<&NumOpResult<FeeRate>> for NumOpResult<Amount>
impl Div<&NumOpResult<FeeRate>> for NumOpResult<Amount>
Source§type Output = <NumOpResult<Amount> as Div<NumOpResult<FeeRate>>>::Output
type Output = <NumOpResult<Amount> as Div<NumOpResult<FeeRate>>>::Output
/ operator.Source§fn div(
self,
rhs: &NumOpResult<FeeRate>,
) -> <NumOpResult<Amount> as Div<&NumOpResult<FeeRate>>>::Output
fn div( self, rhs: &NumOpResult<FeeRate>, ) -> <NumOpResult<Amount> as Div<&NumOpResult<FeeRate>>>::Output
/ operation. Read moreSource§impl<'a> Div<&'a NumOpResult<Weight>> for &NumOpResult<Amount>
impl<'a> Div<&'a NumOpResult<Weight>> for &NumOpResult<Amount>
Source§type Output = <NumOpResult<Amount> as Div<NumOpResult<Weight>>>::Output
type Output = <NumOpResult<Amount> as Div<NumOpResult<Weight>>>::Output
/ operator.Source§fn div(
self,
rhs: &NumOpResult<Weight>,
) -> <&NumOpResult<Amount> as Div<&'a NumOpResult<Weight>>>::Output
fn div( self, rhs: &NumOpResult<Weight>, ) -> <&NumOpResult<Amount> as Div<&'a NumOpResult<Weight>>>::Output
/ operation. Read moreSource§impl Div<&NumOpResult<Weight>> for NumOpResult<Amount>
impl Div<&NumOpResult<Weight>> for NumOpResult<Amount>
Source§type Output = <NumOpResult<Amount> as Div<NumOpResult<Weight>>>::Output
type Output = <NumOpResult<Amount> as Div<NumOpResult<Weight>>>::Output
/ operator.Source§fn div(
self,
rhs: &NumOpResult<Weight>,
) -> <NumOpResult<Amount> as Div<&NumOpResult<Weight>>>::Output
fn div( self, rhs: &NumOpResult<Weight>, ) -> <NumOpResult<Amount> as Div<&NumOpResult<Weight>>>::Output
/ operation. Read moreSource§impl<'a> Div<&'a i64> for &NumOpResult<SignedAmount>
impl<'a> Div<&'a i64> for &NumOpResult<SignedAmount>
Source§type Output = <NumOpResult<SignedAmount> as Div<i64>>::Output
type Output = <NumOpResult<SignedAmount> as Div<i64>>::Output
/ operator.Source§fn div(self, rhs: &i64) -> <&NumOpResult<SignedAmount> as Div<&'a i64>>::Output
fn div(self, rhs: &i64) -> <&NumOpResult<SignedAmount> as Div<&'a i64>>::Output
/ operation. Read moreSource§impl Div<&i64> for NumOpResult<SignedAmount>
impl Div<&i64> for NumOpResult<SignedAmount>
Source§type Output = <NumOpResult<SignedAmount> as Div<i64>>::Output
type Output = <NumOpResult<SignedAmount> as Div<i64>>::Output
/ operator.Source§fn div(self, rhs: &i64) -> <NumOpResult<SignedAmount> as Div<&i64>>::Output
fn div(self, rhs: &i64) -> <NumOpResult<SignedAmount> as Div<&i64>>::Output
/ operation. Read moreSource§impl Div<NumOpResult<FeeRate>> for &NumOpResult<Amount>
impl Div<NumOpResult<FeeRate>> for &NumOpResult<Amount>
Source§type Output = <NumOpResult<Amount> as Div<NumOpResult<FeeRate>>>::Output
type Output = <NumOpResult<Amount> as Div<NumOpResult<FeeRate>>>::Output
/ operator.Source§fn div(
self,
rhs: NumOpResult<FeeRate>,
) -> <&NumOpResult<Amount> as Div<NumOpResult<FeeRate>>>::Output
fn div( self, rhs: NumOpResult<FeeRate>, ) -> <&NumOpResult<Amount> as Div<NumOpResult<FeeRate>>>::Output
/ operation. Read moreSource§impl Div<NumOpResult<FeeRate>> for NumOpResult<Amount>
impl Div<NumOpResult<FeeRate>> for NumOpResult<Amount>
Source§type Output = NumOpResult<Weight>
type Output = NumOpResult<Weight>
/ operator.Source§fn div(
self,
rhs: NumOpResult<FeeRate>,
) -> <NumOpResult<Amount> as Div<NumOpResult<FeeRate>>>::Output
fn div( self, rhs: NumOpResult<FeeRate>, ) -> <NumOpResult<Amount> as Div<NumOpResult<FeeRate>>>::Output
/ operation. Read moreSource§impl Div<NumOpResult<Weight>> for &NumOpResult<Amount>
impl Div<NumOpResult<Weight>> for &NumOpResult<Amount>
Source§type Output = <NumOpResult<Amount> as Div<NumOpResult<Weight>>>::Output
type Output = <NumOpResult<Amount> as Div<NumOpResult<Weight>>>::Output
/ operator.Source§fn div(
self,
rhs: NumOpResult<Weight>,
) -> <&NumOpResult<Amount> as Div<NumOpResult<Weight>>>::Output
fn div( self, rhs: NumOpResult<Weight>, ) -> <&NumOpResult<Amount> as Div<NumOpResult<Weight>>>::Output
/ operation. Read moreSource§impl Div<NumOpResult<Weight>> for NumOpResult<Amount>
impl Div<NumOpResult<Weight>> for NumOpResult<Amount>
Source§type Output = NumOpResult<FeeRate>
type Output = NumOpResult<FeeRate>
/ operator.Source§fn div(
self,
rhs: NumOpResult<Weight>,
) -> <NumOpResult<Amount> as Div<NumOpResult<Weight>>>::Output
fn div( self, rhs: NumOpResult<Weight>, ) -> <NumOpResult<Amount> as Div<NumOpResult<Weight>>>::Output
/ operation. Read moreSource§impl Div<i64> for &NumOpResult<SignedAmount>
impl Div<i64> for &NumOpResult<SignedAmount>
Source§type Output = <NumOpResult<SignedAmount> as Div<i64>>::Output
type Output = <NumOpResult<SignedAmount> as Div<i64>>::Output
/ operator.Source§fn div(self, rhs: i64) -> <&NumOpResult<SignedAmount> as Div<i64>>::Output
fn div(self, rhs: i64) -> <&NumOpResult<SignedAmount> as Div<i64>>::Output
/ operation. Read moreSource§impl Div<i64> for NumOpResult<SignedAmount>
impl Div<i64> for NumOpResult<SignedAmount>
Source§type Output = NumOpResult<SignedAmount>
type Output = NumOpResult<SignedAmount>
/ operator.Source§fn div(self, rhs: i64) -> <NumOpResult<SignedAmount> as Div<i64>>::Output
fn div(self, rhs: i64) -> <NumOpResult<SignedAmount> as Div<i64>>::Output
/ operation. Read moreSource§impl DivAssign<&i64> for NumOpResult<SignedAmount>
impl DivAssign<&i64> for NumOpResult<SignedAmount>
Source§fn div_assign(&mut self, rhs: &i64)
fn div_assign(&mut self, rhs: &i64)
/= operation. Read moreSource§impl DivAssign<&u64> for NumOpResult<Amount>
impl DivAssign<&u64> for NumOpResult<Amount>
Source§fn div_assign(&mut self, rhs: &u64)
fn div_assign(&mut self, rhs: &u64)
/= operation. Read moreSource§impl DivAssign<i64> for NumOpResult<SignedAmount>
impl DivAssign<i64> for NumOpResult<SignedAmount>
Source§fn div_assign(&mut self, rhs: i64)
fn div_assign(&mut self, rhs: i64)
/= operation. Read moreSource§impl DivAssign<u64> for NumOpResult<Amount>
impl DivAssign<u64> for NumOpResult<Amount>
Source§fn div_assign(&mut self, rhs: u64)
fn div_assign(&mut self, rhs: u64)
/= operation. Read moreSource§impl From<&SignedAmount> for NumOpResult<SignedAmount>
impl From<&SignedAmount> for NumOpResult<SignedAmount>
Source§fn from(a: &SignedAmount) -> NumOpResult<SignedAmount>
fn from(a: &SignedAmount) -> NumOpResult<SignedAmount>
Source§impl From<SignedAmount> for NumOpResult<SignedAmount>
impl From<SignedAmount> for NumOpResult<SignedAmount>
Source§fn from(a: SignedAmount) -> NumOpResult<SignedAmount>
fn from(a: SignedAmount) -> NumOpResult<SignedAmount>
Source§impl<'a> Mul<&'a NumOpResult<FeeRate>> for &NumOpResult<Weight>
impl<'a> Mul<&'a NumOpResult<FeeRate>> for &NumOpResult<Weight>
Source§type Output = <NumOpResult<Weight> as Mul<NumOpResult<FeeRate>>>::Output
type Output = <NumOpResult<Weight> as Mul<NumOpResult<FeeRate>>>::Output
* operator.Source§fn mul(
self,
rhs: &NumOpResult<FeeRate>,
) -> <&NumOpResult<Weight> as Mul<&'a NumOpResult<FeeRate>>>::Output
fn mul( self, rhs: &NumOpResult<FeeRate>, ) -> <&NumOpResult<Weight> as Mul<&'a NumOpResult<FeeRate>>>::Output
* operation. Read moreSource§impl Mul<&NumOpResult<FeeRate>> for NumOpResult<Weight>
impl Mul<&NumOpResult<FeeRate>> for NumOpResult<Weight>
Source§type Output = <NumOpResult<Weight> as Mul<NumOpResult<FeeRate>>>::Output
type Output = <NumOpResult<Weight> as Mul<NumOpResult<FeeRate>>>::Output
* operator.Source§fn mul(
self,
rhs: &NumOpResult<FeeRate>,
) -> <NumOpResult<Weight> as Mul<&NumOpResult<FeeRate>>>::Output
fn mul( self, rhs: &NumOpResult<FeeRate>, ) -> <NumOpResult<Weight> as Mul<&NumOpResult<FeeRate>>>::Output
* operation. Read moreSource§impl<'a> Mul<&'a NumOpResult<SignedAmount>> for &i64
impl<'a> Mul<&'a NumOpResult<SignedAmount>> for &i64
Source§type Output = <i64 as Mul<NumOpResult<SignedAmount>>>::Output
type Output = <i64 as Mul<NumOpResult<SignedAmount>>>::Output
* operator.Source§fn mul(
self,
rhs: &NumOpResult<SignedAmount>,
) -> <&i64 as Mul<&'a NumOpResult<SignedAmount>>>::Output
fn mul( self, rhs: &NumOpResult<SignedAmount>, ) -> <&i64 as Mul<&'a NumOpResult<SignedAmount>>>::Output
* operation. Read moreSource§impl Mul<&NumOpResult<SignedAmount>> for i64
impl Mul<&NumOpResult<SignedAmount>> for i64
Source§type Output = <i64 as Mul<NumOpResult<SignedAmount>>>::Output
type Output = <i64 as Mul<NumOpResult<SignedAmount>>>::Output
* operator.Source§fn mul(
self,
rhs: &NumOpResult<SignedAmount>,
) -> <i64 as Mul<&NumOpResult<SignedAmount>>>::Output
fn mul( self, rhs: &NumOpResult<SignedAmount>, ) -> <i64 as Mul<&NumOpResult<SignedAmount>>>::Output
* operation. Read moreSource§impl<'a> Mul<&'a NumOpResult<Weight>> for &NumOpResult<FeeRate>
impl<'a> Mul<&'a NumOpResult<Weight>> for &NumOpResult<FeeRate>
Source§type Output = <NumOpResult<FeeRate> as Mul<NumOpResult<Weight>>>::Output
type Output = <NumOpResult<FeeRate> as Mul<NumOpResult<Weight>>>::Output
* operator.Source§fn mul(
self,
rhs: &NumOpResult<Weight>,
) -> <&NumOpResult<FeeRate> as Mul<&'a NumOpResult<Weight>>>::Output
fn mul( self, rhs: &NumOpResult<Weight>, ) -> <&NumOpResult<FeeRate> as Mul<&'a NumOpResult<Weight>>>::Output
* operation. Read moreSource§impl Mul<&NumOpResult<Weight>> for NumOpResult<FeeRate>
impl Mul<&NumOpResult<Weight>> for NumOpResult<FeeRate>
Source§type Output = <NumOpResult<FeeRate> as Mul<NumOpResult<Weight>>>::Output
type Output = <NumOpResult<FeeRate> as Mul<NumOpResult<Weight>>>::Output
* operator.Source§fn mul(
self,
rhs: &NumOpResult<Weight>,
) -> <NumOpResult<FeeRate> as Mul<&NumOpResult<Weight>>>::Output
fn mul( self, rhs: &NumOpResult<Weight>, ) -> <NumOpResult<FeeRate> as Mul<&NumOpResult<Weight>>>::Output
* operation. Read moreSource§impl<'a> Mul<&'a i64> for &NumOpResult<SignedAmount>
impl<'a> Mul<&'a i64> for &NumOpResult<SignedAmount>
Source§type Output = <NumOpResult<SignedAmount> as Mul<i64>>::Output
type Output = <NumOpResult<SignedAmount> as Mul<i64>>::Output
* operator.Source§fn mul(self, rhs: &i64) -> <&NumOpResult<SignedAmount> as Mul<&'a i64>>::Output
fn mul(self, rhs: &i64) -> <&NumOpResult<SignedAmount> as Mul<&'a i64>>::Output
* operation. Read moreSource§impl Mul<&i64> for NumOpResult<SignedAmount>
impl Mul<&i64> for NumOpResult<SignedAmount>
Source§type Output = <NumOpResult<SignedAmount> as Mul<i64>>::Output
type Output = <NumOpResult<SignedAmount> as Mul<i64>>::Output
* operator.Source§fn mul(self, rhs: &i64) -> <NumOpResult<SignedAmount> as Mul<&i64>>::Output
fn mul(self, rhs: &i64) -> <NumOpResult<SignedAmount> as Mul<&i64>>::Output
* operation. Read moreSource§impl Mul<NumOpResult<FeeRate>> for &NumOpResult<Weight>
impl Mul<NumOpResult<FeeRate>> for &NumOpResult<Weight>
Source§type Output = <NumOpResult<Weight> as Mul<NumOpResult<FeeRate>>>::Output
type Output = <NumOpResult<Weight> as Mul<NumOpResult<FeeRate>>>::Output
* operator.Source§fn mul(
self,
rhs: NumOpResult<FeeRate>,
) -> <&NumOpResult<Weight> as Mul<NumOpResult<FeeRate>>>::Output
fn mul( self, rhs: NumOpResult<FeeRate>, ) -> <&NumOpResult<Weight> as Mul<NumOpResult<FeeRate>>>::Output
* operation. Read moreSource§impl Mul<NumOpResult<FeeRate>> for NumOpResult<Weight>
impl Mul<NumOpResult<FeeRate>> for NumOpResult<Weight>
Source§type Output = NumOpResult<Amount>
type Output = NumOpResult<Amount>
* operator.Source§fn mul(
self,
rhs: NumOpResult<FeeRate>,
) -> <NumOpResult<Weight> as Mul<NumOpResult<FeeRate>>>::Output
fn mul( self, rhs: NumOpResult<FeeRate>, ) -> <NumOpResult<Weight> as Mul<NumOpResult<FeeRate>>>::Output
* operation. Read moreSource§impl Mul<NumOpResult<SignedAmount>> for &i64
impl Mul<NumOpResult<SignedAmount>> for &i64
Source§type Output = <i64 as Mul<NumOpResult<SignedAmount>>>::Output
type Output = <i64 as Mul<NumOpResult<SignedAmount>>>::Output
* operator.Source§fn mul(
self,
rhs: NumOpResult<SignedAmount>,
) -> <&i64 as Mul<NumOpResult<SignedAmount>>>::Output
fn mul( self, rhs: NumOpResult<SignedAmount>, ) -> <&i64 as Mul<NumOpResult<SignedAmount>>>::Output
* operation. Read moreSource§impl Mul<NumOpResult<SignedAmount>> for i64
impl Mul<NumOpResult<SignedAmount>> for i64
Source§type Output = NumOpResult<SignedAmount>
type Output = NumOpResult<SignedAmount>
* operator.Source§fn mul(
self,
rhs: NumOpResult<SignedAmount>,
) -> <i64 as Mul<NumOpResult<SignedAmount>>>::Output
fn mul( self, rhs: NumOpResult<SignedAmount>, ) -> <i64 as Mul<NumOpResult<SignedAmount>>>::Output
* operation. Read moreSource§impl Mul<NumOpResult<Weight>> for &NumOpResult<FeeRate>
impl Mul<NumOpResult<Weight>> for &NumOpResult<FeeRate>
Source§type Output = <NumOpResult<FeeRate> as Mul<NumOpResult<Weight>>>::Output
type Output = <NumOpResult<FeeRate> as Mul<NumOpResult<Weight>>>::Output
* operator.Source§fn mul(
self,
rhs: NumOpResult<Weight>,
) -> <&NumOpResult<FeeRate> as Mul<NumOpResult<Weight>>>::Output
fn mul( self, rhs: NumOpResult<Weight>, ) -> <&NumOpResult<FeeRate> as Mul<NumOpResult<Weight>>>::Output
* operation. Read moreSource§impl Mul<NumOpResult<Weight>> for NumOpResult<FeeRate>
impl Mul<NumOpResult<Weight>> for NumOpResult<FeeRate>
Source§type Output = NumOpResult<Amount>
type Output = NumOpResult<Amount>
* operator.Source§fn mul(
self,
rhs: NumOpResult<Weight>,
) -> <NumOpResult<FeeRate> as Mul<NumOpResult<Weight>>>::Output
fn mul( self, rhs: NumOpResult<Weight>, ) -> <NumOpResult<FeeRate> as Mul<NumOpResult<Weight>>>::Output
* operation. Read moreSource§impl Mul<i64> for &NumOpResult<SignedAmount>
impl Mul<i64> for &NumOpResult<SignedAmount>
Source§type Output = <NumOpResult<SignedAmount> as Mul<i64>>::Output
type Output = <NumOpResult<SignedAmount> as Mul<i64>>::Output
* operator.Source§fn mul(self, rhs: i64) -> <&NumOpResult<SignedAmount> as Mul<i64>>::Output
fn mul(self, rhs: i64) -> <&NumOpResult<SignedAmount> as Mul<i64>>::Output
* operation. Read moreSource§impl Mul<i64> for NumOpResult<SignedAmount>
impl Mul<i64> for NumOpResult<SignedAmount>
Source§type Output = NumOpResult<SignedAmount>
type Output = NumOpResult<SignedAmount>
* operator.Source§fn mul(self, rhs: i64) -> <NumOpResult<SignedAmount> as Mul<i64>>::Output
fn mul(self, rhs: i64) -> <NumOpResult<SignedAmount> as Mul<i64>>::Output
* operation. Read moreSource§impl MulAssign<&i64> for NumOpResult<SignedAmount>
impl MulAssign<&i64> for NumOpResult<SignedAmount>
Source§fn mul_assign(&mut self, rhs: &i64)
fn mul_assign(&mut self, rhs: &i64)
*= operation. Read moreSource§impl MulAssign<&u64> for NumOpResult<Amount>
impl MulAssign<&u64> for NumOpResult<Amount>
Source§fn mul_assign(&mut self, rhs: &u64)
fn mul_assign(&mut self, rhs: &u64)
*= operation. Read moreSource§impl MulAssign<i64> for NumOpResult<SignedAmount>
impl MulAssign<i64> for NumOpResult<SignedAmount>
Source§fn mul_assign(&mut self, rhs: i64)
fn mul_assign(&mut self, rhs: i64)
*= operation. Read moreSource§impl MulAssign<u64> for NumOpResult<Amount>
impl MulAssign<u64> for NumOpResult<Amount>
Source§fn mul_assign(&mut self, rhs: u64)
fn mul_assign(&mut self, rhs: u64)
*= operation. Read moreSource§impl<T> PartialEq for NumOpResult<T>where
T: PartialEq,
impl<T> PartialEq for NumOpResult<T>where
T: PartialEq,
Source§impl<'a> Rem<&'a i64> for &NumOpResult<SignedAmount>
impl<'a> Rem<&'a i64> for &NumOpResult<SignedAmount>
Source§type Output = <NumOpResult<SignedAmount> as Rem<i64>>::Output
type Output = <NumOpResult<SignedAmount> as Rem<i64>>::Output
% operator.Source§fn rem(self, rhs: &i64) -> <&NumOpResult<SignedAmount> as Rem<&'a i64>>::Output
fn rem(self, rhs: &i64) -> <&NumOpResult<SignedAmount> as Rem<&'a i64>>::Output
% operation. Read moreSource§impl Rem<&i64> for NumOpResult<SignedAmount>
impl Rem<&i64> for NumOpResult<SignedAmount>
Source§type Output = <NumOpResult<SignedAmount> as Rem<i64>>::Output
type Output = <NumOpResult<SignedAmount> as Rem<i64>>::Output
% operator.Source§fn rem(self, rhs: &i64) -> <NumOpResult<SignedAmount> as Rem<&i64>>::Output
fn rem(self, rhs: &i64) -> <NumOpResult<SignedAmount> as Rem<&i64>>::Output
% operation. Read moreSource§impl Rem<i64> for &NumOpResult<SignedAmount>
impl Rem<i64> for &NumOpResult<SignedAmount>
Source§type Output = <NumOpResult<SignedAmount> as Rem<i64>>::Output
type Output = <NumOpResult<SignedAmount> as Rem<i64>>::Output
% operator.Source§fn rem(self, rhs: i64) -> <&NumOpResult<SignedAmount> as Rem<i64>>::Output
fn rem(self, rhs: i64) -> <&NumOpResult<SignedAmount> as Rem<i64>>::Output
% operation. Read moreSource§impl Rem<i64> for NumOpResult<SignedAmount>
impl Rem<i64> for NumOpResult<SignedAmount>
Source§type Output = NumOpResult<SignedAmount>
type Output = NumOpResult<SignedAmount>
% operator.Source§fn rem(self, modulus: i64) -> <NumOpResult<SignedAmount> as Rem<i64>>::Output
fn rem(self, modulus: i64) -> <NumOpResult<SignedAmount> as Rem<i64>>::Output
% operation. Read moreSource§impl<'a> Sub<&'a NumOpResult<SignedAmount>> for &SignedAmount
impl<'a> Sub<&'a NumOpResult<SignedAmount>> for &SignedAmount
Source§type Output = <SignedAmount as Sub<NumOpResult<SignedAmount>>>::Output
type Output = <SignedAmount as Sub<NumOpResult<SignedAmount>>>::Output
- operator.Source§fn sub(
self,
rhs: &NumOpResult<SignedAmount>,
) -> <&SignedAmount as Sub<&'a NumOpResult<SignedAmount>>>::Output
fn sub( self, rhs: &NumOpResult<SignedAmount>, ) -> <&SignedAmount as Sub<&'a NumOpResult<SignedAmount>>>::Output
- operation. Read moreSource§impl Sub<&NumOpResult<SignedAmount>> for SignedAmount
impl Sub<&NumOpResult<SignedAmount>> for SignedAmount
Source§type Output = <SignedAmount as Sub<NumOpResult<SignedAmount>>>::Output
type Output = <SignedAmount as Sub<NumOpResult<SignedAmount>>>::Output
- operator.Source§fn sub(
self,
rhs: &NumOpResult<SignedAmount>,
) -> <SignedAmount as Sub<&NumOpResult<SignedAmount>>>::Output
fn sub( self, rhs: &NumOpResult<SignedAmount>, ) -> <SignedAmount as Sub<&NumOpResult<SignedAmount>>>::Output
- operation. Read moreSource§impl<'a, T> Sub<&'a NumOpResult<T>> for &NumOpResult<T>
impl<'a, T> Sub<&'a NumOpResult<T>> for &NumOpResult<T>
Source§type Output = <NumOpResult<T> as Sub>::Output
type Output = <NumOpResult<T> as Sub>::Output
- operator.Source§fn sub(
self,
rhs: &NumOpResult<T>,
) -> <&NumOpResult<T> as Sub<&'a NumOpResult<T>>>::Output
fn sub( self, rhs: &NumOpResult<T>, ) -> <&NumOpResult<T> as Sub<&'a NumOpResult<T>>>::Output
- operation. Read moreSource§impl<T> Sub<&NumOpResult<T>> for NumOpResult<T>
impl<T> Sub<&NumOpResult<T>> for NumOpResult<T>
Source§type Output = <NumOpResult<T> as Sub>::Output
type Output = <NumOpResult<T> as Sub>::Output
- operator.Source§fn sub(
self,
rhs: &NumOpResult<T>,
) -> <NumOpResult<T> as Sub<&NumOpResult<T>>>::Output
fn sub( self, rhs: &NumOpResult<T>, ) -> <NumOpResult<T> as Sub<&NumOpResult<T>>>::Output
- operation. Read moreSource§impl<'a, T> Sub<&'a T> for &NumOpResult<T>
impl<'a, T> Sub<&'a T> for &NumOpResult<T>
Source§impl<T> Sub<&T> for NumOpResult<T>
impl<T> Sub<&T> for NumOpResult<T>
Source§impl Sub<NumOpResult<SignedAmount>> for &SignedAmount
impl Sub<NumOpResult<SignedAmount>> for &SignedAmount
Source§type Output = <SignedAmount as Sub<NumOpResult<SignedAmount>>>::Output
type Output = <SignedAmount as Sub<NumOpResult<SignedAmount>>>::Output
- operator.Source§fn sub(
self,
rhs: NumOpResult<SignedAmount>,
) -> <&SignedAmount as Sub<NumOpResult<SignedAmount>>>::Output
fn sub( self, rhs: NumOpResult<SignedAmount>, ) -> <&SignedAmount as Sub<NumOpResult<SignedAmount>>>::Output
- operation. Read moreSource§impl Sub<NumOpResult<SignedAmount>> for SignedAmount
impl Sub<NumOpResult<SignedAmount>> for SignedAmount
Source§type Output = NumOpResult<SignedAmount>
type Output = NumOpResult<SignedAmount>
- operator.Source§fn sub(
self,
rhs: NumOpResult<SignedAmount>,
) -> <SignedAmount as Sub<NumOpResult<SignedAmount>>>::Output
fn sub( self, rhs: NumOpResult<SignedAmount>, ) -> <SignedAmount as Sub<NumOpResult<SignedAmount>>>::Output
- operation. Read moreSource§impl<T> Sub<NumOpResult<T>> for &NumOpResult<T>
impl<T> Sub<NumOpResult<T>> for &NumOpResult<T>
Source§type Output = <NumOpResult<T> as Sub>::Output
type Output = <NumOpResult<T> as Sub>::Output
- operator.Source§fn sub(
self,
rhs: NumOpResult<T>,
) -> <&NumOpResult<T> as Sub<NumOpResult<T>>>::Output
fn sub( self, rhs: NumOpResult<T>, ) -> <&NumOpResult<T> as Sub<NumOpResult<T>>>::Output
- operation. Read moreSource§impl<T> Sub<T> for &NumOpResult<T>
impl<T> Sub<T> for &NumOpResult<T>
Source§impl<T> Sub<T> for NumOpResult<T>
impl<T> Sub<T> for NumOpResult<T>
Source§impl<T> Sub for NumOpResult<T>
impl<T> Sub for NumOpResult<T>
Source§type Output = NumOpResult<T>
type Output = NumOpResult<T>
- operator.Source§fn sub(self, rhs: NumOpResult<T>) -> <NumOpResult<T> as Sub>::Output
fn sub(self, rhs: NumOpResult<T>) -> <NumOpResult<T> as Sub>::Output
- operation. Read moreSource§impl SubAssign<Amount> for NumOpResult<Amount>
impl SubAssign<Amount> for NumOpResult<Amount>
Source§fn sub_assign(&mut self, rhs: Amount)
fn sub_assign(&mut self, rhs: Amount)
-= operation. Read moreSource§impl SubAssign<SignedAmount> for NumOpResult<SignedAmount>
impl SubAssign<SignedAmount> for NumOpResult<SignedAmount>
Source§fn sub_assign(&mut self, rhs: SignedAmount)
fn sub_assign(&mut self, rhs: SignedAmount)
-= operation. Read moreSource§impl<T> SubAssign<T> for NumOpResult<T>where
T: SubAssign,
impl<T> SubAssign<T> for NumOpResult<T>where
T: SubAssign,
Source§fn sub_assign(&mut self, rhs: T)
fn sub_assign(&mut self, rhs: T)
-= operation. Read moreSource§impl SubAssign for NumOpResult<Amount>
impl SubAssign for NumOpResult<Amount>
Source§fn sub_assign(&mut self, rhs: NumOpResult<Amount>)
fn sub_assign(&mut self, rhs: NumOpResult<Amount>)
-= operation. Read moreSource§impl SubAssign for NumOpResult<SignedAmount>
impl SubAssign for NumOpResult<SignedAmount>
Source§fn sub_assign(&mut self, rhs: NumOpResult<SignedAmount>)
fn sub_assign(&mut self, rhs: NumOpResult<SignedAmount>)
-= operation. Read moreSource§impl<T> SubAssign for NumOpResult<T>
impl<T> SubAssign for NumOpResult<T>
Source§fn sub_assign(&mut self, rhs: NumOpResult<T>)
fn sub_assign(&mut self, rhs: NumOpResult<T>)
-= operation. Read moreSource§impl<'a> Sum<&'a NumOpResult<Amount>> for NumOpResult<Amount>
impl<'a> Sum<&'a NumOpResult<Amount>> for NumOpResult<Amount>
Source§fn sum<I>(iter: I) -> NumOpResult<Amount>
fn sum<I>(iter: I) -> NumOpResult<Amount>
Self from the elements by “summing up”
the items.Source§impl<'a> Sum<&'a NumOpResult<SignedAmount>> for NumOpResult<SignedAmount>
impl<'a> Sum<&'a NumOpResult<SignedAmount>> for NumOpResult<SignedAmount>
Source§fn sum<I>(iter: I) -> NumOpResult<SignedAmount>
fn sum<I>(iter: I) -> NumOpResult<SignedAmount>
Self from the elements by “summing up”
the items.Source§impl Sum for NumOpResult<Amount>
impl Sum for NumOpResult<Amount>
Source§fn sum<I>(iter: I) -> NumOpResult<Amount>
fn sum<I>(iter: I) -> NumOpResult<Amount>
Self from the elements by “summing up”
the items.Source§impl Sum for NumOpResult<SignedAmount>
impl Sum for NumOpResult<SignedAmount>
Source§fn sum<I>(iter: I) -> NumOpResult<SignedAmount>
fn sum<I>(iter: I) -> NumOpResult<SignedAmount>
Self from the elements by “summing up”
the items.