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(100)?;
// 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");§Failure in chained operations
In some instances one may wish to differentiate one math op failure from another.
// 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_u32(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.operation().is_division() => {
// Do something when division fails (div by zero or perhaps MIN / -1).
return Err(e);
},
NumOpResult::Error(e) => {
// And something else if the addition overflowed.
//
// 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);
}
};If both operands of a binary op are already Error, only the left-hand error is returned.
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: FnOnce(T) -> U>(self, op: F) -> NumOpResult<U>
pub fn map<U, F: FnOnce(T) -> U>(self, op: F) -> NumOpResult<U>
Maps a NumOpResult<T> to NumOpResult<U> by applying a function to a
contained NumOpResult::Valid value, leaving a NumOpResult::Error value untouched.
Sourcepub fn unwrap_or(self, default: T) -> T
pub fn unwrap_or(self, default: T) -> T
Returns the contained Valid 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 Valid value or computes it from a closure.
Sourcepub fn ok(self) -> Option<T>
pub fn ok(self) -> Option<T>
Converts this NumOpResult to an Option<T>.
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 from_result(result: Result<T, NumOpError>) -> Self
pub fn from_result(result: Result<T, NumOpError>) -> Self
Converts a Result<T, NumOpError> to a NumOpResult.
Source§impl<T: Debug> NumOpResult<T>
impl<T: Debug> NumOpResult<T>
Sourcepub fn unwrap_err(self) -> NumOpError
pub fn unwrap_err(self) -> NumOpError
Trait Implementations§
Source§impl<T> Add for NumOpResult<T>
impl<T> Add for NumOpResult<T>
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>) -> Self::Output
fn add(self, rhs: &NumOpResult<SignedAmount>) -> Self::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§impl<'a, T> Add<&'a T> for &NumOpResult<T>
impl<'a, T> Add<&'a 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>) -> Self::Output
fn add(self, rhs: &NumOpResult<SignedAmount>) -> Self::Output
+ operation. Read moreSource§impl<T> Add<&NumOpResult<T>> for NumOpResult<T>
impl<T> Add<&NumOpResult<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 = NumOpResult<SignedAmount>
type Output = NumOpResult<SignedAmount>
+ operator.Source§fn add(self, rhs: NumOpResult<SignedAmount>) -> Self::Output
fn add(self, rhs: NumOpResult<SignedAmount>) -> Self::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>) -> Self::Output
fn add(self, rhs: NumOpResult<SignedAmount>) -> Self::Output
+ operation. Read moreSource§impl<T> Add<NumOpResult<T>> for &NumOpResult<T>
impl<T> Add<NumOpResult<T>> for &NumOpResult<T>
Source§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 AddAssign for NumOpResult<Amount>
impl AddAssign for NumOpResult<Amount>
Source§fn add_assign(&mut self, rhs: Self)
fn add_assign(&mut self, rhs: Self)
+= operation. Read moreSource§impl AddAssign for NumOpResult<SignedAmount>
impl AddAssign for NumOpResult<SignedAmount>
Source§fn add_assign(&mut self, rhs: Self)
fn add_assign(&mut self, rhs: Self)
+= operation. Read moreSource§impl<T: AddAssign + Copy> AddAssign for NumOpResult<T>
impl<T: AddAssign + Copy> AddAssign for NumOpResult<T>
Source§fn add_assign(&mut self, rhs: Self)
fn add_assign(&mut self, rhs: Self)
+= 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> AddAssign<T> for NumOpResult<T>
impl<T: AddAssign> AddAssign<T> for NumOpResult<T>
Source§fn add_assign(&mut self, rhs: T)
fn add_assign(&mut self, rhs: T)
+= operation. Read moreSource§impl<'a, T: Arbitrary<'a>> Arbitrary<'a> for NumOpResult<T>
Available on crate feature arbitrary only.
impl<'a, T: Arbitrary<'a>> Arbitrary<'a> for NumOpResult<T>
arbitrary only.Source§fn arbitrary(u: &mut Unstructured<'a>) -> Result<Self>
fn arbitrary(u: &mut Unstructured<'a>) -> Result<Self>
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> Clone for NumOpResult<T>
impl<T: Clone> Clone for NumOpResult<T>
impl<T: Copy> Copy for NumOpResult<T>
Source§impl<T: Debug> Debug for NumOpResult<T>
impl<T: Debug> Debug for NumOpResult<T>
Source§impl<'a> Div<&'a NonZero<i64>> for &NumOpResult<SignedAmount>
impl<'a> Div<&'a NonZero<i64>> for &NumOpResult<SignedAmount>
Source§type Output = <NumOpResult<SignedAmount> as Div<NonZero<i64>>>::Output
type Output = <NumOpResult<SignedAmount> as Div<NonZero<i64>>>::Output
/ operator.Source§impl<'a> Div<&'a NumOpResult<FeeRate>> for &NumOpResult<Amount>
impl<'a> Div<&'a NumOpResult<FeeRate>> for &NumOpResult<Amount>
Source§impl<'a> Div<&'a NumOpResult<Weight>> for &NumOpResult<Amount>
impl<'a> Div<&'a NumOpResult<Weight>> for &NumOpResult<Amount>
Source§impl<'a> Div<&'a i64> for &NumOpResult<SignedAmount>
impl<'a> Div<&'a i64> for &NumOpResult<SignedAmount>
Source§impl Div<&NonZero<i64>> for NumOpResult<SignedAmount>
impl Div<&NonZero<i64>> for NumOpResult<SignedAmount>
Source§type Output = <NumOpResult<SignedAmount> as Div<NonZero<i64>>>::Output
type Output = <NumOpResult<SignedAmount> as Div<NonZero<i64>>>::Output
/ operator.Source§impl Div<&NumOpResult<FeeRate>> for NumOpResult<Amount>
impl Div<&NumOpResult<FeeRate>> for NumOpResult<Amount>
Source§impl Div<&NumOpResult<Weight>> for NumOpResult<Amount>
impl Div<&NumOpResult<Weight>> for NumOpResult<Amount>
Source§impl Div<&i64> for NumOpResult<SignedAmount>
impl Div<&i64> for NumOpResult<SignedAmount>
Source§impl Div<NonZero<i64>> for NumOpResult<SignedAmount>
impl Div<NonZero<i64>> for NumOpResult<SignedAmount>
Source§type Output = NumOpResult<SignedAmount>
type Output = NumOpResult<SignedAmount>
/ operator.Source§impl Div<NonZero<i64>> for &NumOpResult<SignedAmount>
impl Div<NonZero<i64>> for &NumOpResult<SignedAmount>
Source§type Output = <NumOpResult<SignedAmount> as Div<NonZero<i64>>>::Output
type Output = <NumOpResult<SignedAmount> as Div<NonZero<i64>>>::Output
/ operator.Source§impl Div<NumOpResult<FeeRate>> for NumOpResult<Amount>
impl Div<NumOpResult<FeeRate>> for NumOpResult<Amount>
Source§impl Div<NumOpResult<FeeRate>> for &NumOpResult<Amount>
impl Div<NumOpResult<FeeRate>> for &NumOpResult<Amount>
Source§impl Div<NumOpResult<Weight>> for NumOpResult<Amount>
impl Div<NumOpResult<Weight>> for NumOpResult<Amount>
Source§impl Div<NumOpResult<Weight>> for &NumOpResult<Amount>
impl Div<NumOpResult<Weight>> for &NumOpResult<Amount>
Source§impl Div<i64> for NumOpResult<SignedAmount>
impl Div<i64> for NumOpResult<SignedAmount>
Source§impl Div<i64> for &NumOpResult<SignedAmount>
impl Div<i64> for &NumOpResult<SignedAmount>
Source§impl DivAssign<&NonZero<i64>> for NumOpResult<SignedAmount>
impl DivAssign<&NonZero<i64>> for NumOpResult<SignedAmount>
Source§fn div_assign(&mut self, rhs: &NonZeroI64)
fn div_assign(&mut self, rhs: &NonZeroI64)
/= operation. Read moreSource§impl DivAssign<&NonZero<u64>> for NumOpResult<Amount>
impl DivAssign<&NonZero<u64>> for NumOpResult<Amount>
Source§fn div_assign(&mut self, rhs: &NonZeroU64)
fn div_assign(&mut self, rhs: &NonZeroU64)
/= 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<NonZero<i64>> for NumOpResult<SignedAmount>
impl DivAssign<NonZero<i64>> for NumOpResult<SignedAmount>
Source§fn div_assign(&mut self, rhs: NonZeroI64)
fn div_assign(&mut self, rhs: NonZeroI64)
/= operation. Read moreSource§impl DivAssign<NonZero<u64>> for NumOpResult<Amount>
impl DivAssign<NonZero<u64>> for NumOpResult<Amount>
Source§fn div_assign(&mut self, rhs: NonZeroU64)
fn div_assign(&mut self, rhs: NonZeroU64)
/= 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 moreimpl<T: Eq> Eq for NumOpResult<T>
Source§impl From<&SignedAmount> for NumOpResult<SignedAmount>
impl From<&SignedAmount> for NumOpResult<SignedAmount>
Source§fn from(a: &SignedAmount) -> Self
fn from(a: &SignedAmount) -> Self
Source§impl From<SignedAmount> for NumOpResult<SignedAmount>
impl From<SignedAmount> for NumOpResult<SignedAmount>
Source§fn from(a: SignedAmount) -> Self
fn from(a: SignedAmount) -> Self
Source§impl<'a> Mul<&'a NumOpResult<FeeRate>> for &NumOpResult<Weight>
impl<'a> Mul<&'a NumOpResult<FeeRate>> for &NumOpResult<Weight>
Source§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>) -> Self::Output
fn mul(self, rhs: &NumOpResult<SignedAmount>) -> Self::Output
* operation. Read moreSource§impl<'a> Mul<&'a NumOpResult<Weight>> for &NumOpResult<FeeRate>
impl<'a> Mul<&'a NumOpResult<Weight>> for &NumOpResult<FeeRate>
Source§impl<'a> Mul<&'a i64> for &NumOpResult<SignedAmount>
impl<'a> Mul<&'a i64> for &NumOpResult<SignedAmount>
Source§impl Mul<&NumOpResult<FeeRate>> for NumOpResult<Weight>
impl Mul<&NumOpResult<FeeRate>> for NumOpResult<Weight>
Source§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>) -> Self::Output
fn mul(self, rhs: &NumOpResult<SignedAmount>) -> Self::Output
* operation. Read moreSource§impl Mul<&NumOpResult<Weight>> for NumOpResult<FeeRate>
impl Mul<&NumOpResult<Weight>> for NumOpResult<FeeRate>
Source§impl Mul<&i64> for NumOpResult<SignedAmount>
impl Mul<&i64> for NumOpResult<SignedAmount>
Source§impl Mul<NumOpResult<FeeRate>> for NumOpResult<Weight>
impl Mul<NumOpResult<FeeRate>> for NumOpResult<Weight>
Source§impl Mul<NumOpResult<FeeRate>> for &NumOpResult<Weight>
impl Mul<NumOpResult<FeeRate>> for &NumOpResult<Weight>
Source§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>) -> Self::Output
fn mul(self, rhs: NumOpResult<SignedAmount>) -> Self::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>) -> Self::Output
fn mul(self, rhs: NumOpResult<SignedAmount>) -> Self::Output
* operation. Read moreSource§impl Mul<NumOpResult<Weight>> for NumOpResult<FeeRate>
impl Mul<NumOpResult<Weight>> for NumOpResult<FeeRate>
Source§impl Mul<NumOpResult<Weight>> for &NumOpResult<FeeRate>
impl Mul<NumOpResult<Weight>> for &NumOpResult<FeeRate>
Source§impl Mul<i64> for NumOpResult<SignedAmount>
impl Mul<i64> for NumOpResult<SignedAmount>
Source§impl Mul<i64> for &NumOpResult<SignedAmount>
impl Mul<i64> for &NumOpResult<SignedAmount>
Source§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 Neg for NumOpResult<Amount>
impl Neg for NumOpResult<Amount>
Source§type Output = NumOpResult<SignedAmount>
type Output = NumOpResult<SignedAmount>
- operator.Source§impl Neg for NumOpResult<SignedAmount>
impl Neg for NumOpResult<SignedAmount>
Source§type Output = NumOpResult<SignedAmount>
type Output = NumOpResult<SignedAmount>
- operator.Source§impl<T: PartialEq> PartialEq for NumOpResult<T>
impl<T: PartialEq> PartialEq for NumOpResult<T>
Source§impl<'a> Rem<&'a NonZero<i64>> for &NumOpResult<SignedAmount>
impl<'a> Rem<&'a NonZero<i64>> for &NumOpResult<SignedAmount>
Source§type Output = <NumOpResult<SignedAmount> as Rem<NonZero<i64>>>::Output
type Output = <NumOpResult<SignedAmount> as Rem<NonZero<i64>>>::Output
% operator.Source§impl<'a> Rem<&'a i64> for &NumOpResult<SignedAmount>
impl<'a> Rem<&'a i64> for &NumOpResult<SignedAmount>
Source§impl Rem<&NonZero<i64>> for NumOpResult<SignedAmount>
impl Rem<&NonZero<i64>> for NumOpResult<SignedAmount>
Source§type Output = <NumOpResult<SignedAmount> as Rem<NonZero<i64>>>::Output
type Output = <NumOpResult<SignedAmount> as Rem<NonZero<i64>>>::Output
% operator.Source§impl Rem<&i64> for NumOpResult<SignedAmount>
impl Rem<&i64> for NumOpResult<SignedAmount>
Source§impl Rem<NonZero<i64>> for NumOpResult<SignedAmount>
impl Rem<NonZero<i64>> for NumOpResult<SignedAmount>
Source§type Output = NumOpResult<SignedAmount>
type Output = NumOpResult<SignedAmount>
% operator.Source§impl Rem<NonZero<i64>> for &NumOpResult<SignedAmount>
impl Rem<NonZero<i64>> for &NumOpResult<SignedAmount>
Source§type Output = <NumOpResult<SignedAmount> as Rem<NonZero<i64>>>::Output
type Output = <NumOpResult<SignedAmount> as Rem<NonZero<i64>>>::Output
% operator.Source§impl Rem<i64> for NumOpResult<SignedAmount>
impl Rem<i64> for NumOpResult<SignedAmount>
Source§impl Rem<i64> for &NumOpResult<SignedAmount>
impl Rem<i64> for &NumOpResult<SignedAmount>
Source§impl RemAssign<&NonZero<i64>> for NumOpResult<SignedAmount>
impl RemAssign<&NonZero<i64>> for NumOpResult<SignedAmount>
Source§fn rem_assign(&mut self, rhs: &NonZeroI64)
fn rem_assign(&mut self, rhs: &NonZeroI64)
%= operation. Read moreSource§impl RemAssign<&NonZero<u64>> for NumOpResult<Amount>
impl RemAssign<&NonZero<u64>> for NumOpResult<Amount>
Source§fn rem_assign(&mut self, rhs: &NonZeroU64)
fn rem_assign(&mut self, rhs: &NonZeroU64)
%= operation. Read moreSource§impl RemAssign<&i64> for NumOpResult<SignedAmount>
impl RemAssign<&i64> for NumOpResult<SignedAmount>
Source§fn rem_assign(&mut self, rhs: &i64)
fn rem_assign(&mut self, rhs: &i64)
%= operation. Read moreSource§impl RemAssign<&u64> for NumOpResult<Amount>
impl RemAssign<&u64> for NumOpResult<Amount>
Source§fn rem_assign(&mut self, rhs: &u64)
fn rem_assign(&mut self, rhs: &u64)
%= operation. Read moreSource§impl RemAssign<NonZero<i64>> for NumOpResult<SignedAmount>
impl RemAssign<NonZero<i64>> for NumOpResult<SignedAmount>
Source§fn rem_assign(&mut self, rhs: NonZeroI64)
fn rem_assign(&mut self, rhs: NonZeroI64)
%= operation. Read moreSource§impl RemAssign<NonZero<u64>> for NumOpResult<Amount>
impl RemAssign<NonZero<u64>> for NumOpResult<Amount>
Source§fn rem_assign(&mut self, rhs: NonZeroU64)
fn rem_assign(&mut self, rhs: NonZeroU64)
%= operation. Read moreSource§impl RemAssign<i64> for NumOpResult<SignedAmount>
impl RemAssign<i64> for NumOpResult<SignedAmount>
Source§fn rem_assign(&mut self, rhs: i64)
fn rem_assign(&mut self, rhs: i64)
%= operation. Read moreSource§impl RemAssign<u64> for NumOpResult<Amount>
impl RemAssign<u64> for NumOpResult<Amount>
Source§fn rem_assign(&mut self, rhs: u64)
fn rem_assign(&mut self, rhs: u64)
%= operation. Read moreimpl<T: PartialEq> StructuralPartialEq for NumOpResult<T>
Source§impl<T> Sub for NumOpResult<T>
impl<T> Sub for NumOpResult<T>
Source§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>) -> Self::Output
fn sub(self, rhs: &NumOpResult<SignedAmount>) -> Self::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§impl<'a, T> Sub<&'a T> for &NumOpResult<T>
impl<'a, T> Sub<&'a 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>) -> Self::Output
fn sub(self, rhs: &NumOpResult<SignedAmount>) -> Self::Output
- operation. Read moreSource§impl<T> Sub<&NumOpResult<T>> for NumOpResult<T>
impl<T> Sub<&NumOpResult<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 = NumOpResult<SignedAmount>
type Output = NumOpResult<SignedAmount>
- operator.Source§fn sub(self, rhs: NumOpResult<SignedAmount>) -> Self::Output
fn sub(self, rhs: NumOpResult<SignedAmount>) -> Self::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>) -> Self::Output
fn sub(self, rhs: NumOpResult<SignedAmount>) -> Self::Output
- operation. Read moreSource§impl<T> Sub<NumOpResult<T>> for &NumOpResult<T>
impl<T> Sub<NumOpResult<T>> for &NumOpResult<T>
Source§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 SubAssign for NumOpResult<Amount>
impl SubAssign for NumOpResult<Amount>
Source§fn sub_assign(&mut self, rhs: Self)
fn sub_assign(&mut self, rhs: Self)
-= operation. Read moreSource§impl SubAssign for NumOpResult<SignedAmount>
impl SubAssign for NumOpResult<SignedAmount>
Source§fn sub_assign(&mut self, rhs: Self)
fn sub_assign(&mut self, rhs: Self)
-= operation. Read moreSource§impl<T: SubAssign + Copy> SubAssign for NumOpResult<T>
impl<T: SubAssign + Copy> SubAssign for NumOpResult<T>
Source§fn sub_assign(&mut self, rhs: Self)
fn sub_assign(&mut self, rhs: Self)
-= 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> SubAssign<T> for NumOpResult<T>
impl<T: SubAssign> SubAssign<T> for NumOpResult<T>
Source§fn sub_assign(&mut self, rhs: T)
fn sub_assign(&mut self, rhs: T)
-= operation. Read moreSource§impl Sum for NumOpResult<Amount>
Note: it’s unspecified how many items from the iterator this implementation consumes if overflow occurs.
impl Sum for NumOpResult<Amount>
Note: it’s unspecified how many items from the iterator this implementation consumes if overflow occurs.
Source§impl Sum for NumOpResult<SignedAmount>
Note: it’s unspecified how many items from the iterator this implementation consumes if overflow occurs.
impl Sum for NumOpResult<SignedAmount>
Note: it’s unspecified how many items from the iterator this implementation consumes if overflow occurs.
Source§impl<'a> Sum<&'a Amount> for NumOpResult<Amount>
Note: it’s unspecified how many items from the iterator this implementation consumes if overflow occurs.
impl<'a> Sum<&'a Amount> for NumOpResult<Amount>
Note: it’s unspecified how many items from the iterator this implementation consumes if overflow occurs.
Source§impl<'a> Sum<&'a NumOpResult<Amount>> for NumOpResult<Amount>
Note: it’s unspecified how many items from the iterator this implementation consumes if overflow occurs.
impl<'a> Sum<&'a NumOpResult<Amount>> for NumOpResult<Amount>
Note: it’s unspecified how many items from the iterator this implementation consumes if overflow occurs.
Source§impl<'a> Sum<&'a NumOpResult<SignedAmount>> for NumOpResult<SignedAmount>
Note: it’s unspecified how many items from the iterator this implementation consumes if overflow occurs.
impl<'a> Sum<&'a NumOpResult<SignedAmount>> for NumOpResult<SignedAmount>
Note: it’s unspecified how many items from the iterator this implementation consumes if overflow occurs.
Source§impl<'a> Sum<&'a SignedAmount> for NumOpResult<SignedAmount>
Note: it’s unspecified how many items from the iterator this implementation consumes if overflow occurs.
impl<'a> Sum<&'a SignedAmount> for NumOpResult<SignedAmount>
Note: it’s unspecified how many items from the iterator this implementation consumes if overflow occurs.
Source§fn sum<I>(iter: I) -> Selfwhere
I: Iterator<Item = &'a SignedAmount>,
fn sum<I>(iter: I) -> Selfwhere
I: Iterator<Item = &'a SignedAmount>,
Self from the elements by “summing up”
the items.Source§impl Sum<Amount> for NumOpResult<Amount>
Note: it’s unspecified how many items from the iterator this implementation consumes if overflow occurs.
impl Sum<Amount> for NumOpResult<Amount>
Note: it’s unspecified how many items from the iterator this implementation consumes if overflow occurs.
Source§impl Sum<SignedAmount> for NumOpResult<SignedAmount>
Note: it’s unspecified how many items from the iterator this implementation consumes if overflow occurs.
impl Sum<SignedAmount> for NumOpResult<SignedAmount>
Note: it’s unspecified how many items from the iterator this implementation consumes if overflow occurs.
Source§fn sum<I>(iter: I) -> Selfwhere
I: Iterator<Item = SignedAmount>,
fn sum<I>(iter: I) -> Selfwhere
I: Iterator<Item = SignedAmount>,
Self from the elements by “summing up”
the items.