Derive Copy for NumOpResult

The `NumOpResult` type is way more ergonomic to use if it derives
`Copy`. This restricts the `NumOpResult` to being `Copy` as well.

This does restrict what we can include in the error type in the future.

Derive Copy for `NumOpResult` and `NumOpResult`.
This commit is contained in:
Tobin C. Harding 2025-02-17 14:25:21 +11:00 committed by Andrew Poelstra
parent e80ce4a89c
commit c90559de8e
No known key found for this signature in database
GPG Key ID: C588D63CE41B97C1
2 changed files with 27 additions and 27 deletions

View File

@ -12,7 +12,7 @@ use super::{Amount, SignedAmount};
/// Result of an operation on [`Amount`] or [`SignedAmount`].
///
/// The type parameter `T` should be normally `Amout` or `SignedAmount`.
#[derive(Debug, Clone, PartialEq, Eq)]
#[derive(Debug, Copy, Clone, PartialEq, Eq)]
#[must_use]
pub enum NumOpResult<T> {
/// Result of a successful mathematical operation.
@ -584,7 +584,7 @@ impl OptionExt<SignedAmount> for Option<SignedAmount> {
}
/// An error occurred while doing a mathematical operation.
#[derive(Debug, Clone, PartialEq, Eq)]
#[derive(Debug, Copy, Clone, PartialEq, Eq)]
#[non_exhaustive]
pub struct NumOpError;

View File

@ -1329,44 +1329,44 @@ fn amount_op_result_all_ops() {
// let sres: NumOpResult<SignedAmount> = ssat + ssat;
// Operations that where RHS is the result of another operation.
let _ = sat + res.clone();
let _ = &sat + res.clone();
// let _ = sat + &res.clone();
// let _ = &sat + &res.clone();
let _ = sat + res;
let _ = &sat + res;
// let _ = sat + &res;
// let _ = &sat + &res;
let _ = sat - res.clone();
let _ = &sat - res.clone();
// let _ = sat - &res.clone();
// let _ = &sat - &res.clone();
let _ = sat - res;
let _ = &sat - res;
// let _ = sat - &res;
// let _ = &sat - &res;
// Operations that where LHS is the result of another operation.
let _ = res.clone() + sat;
// let _ = &res.clone() + sat;
let _ = res.clone() + &sat;
// let _ = &res.clone() + &sat;
let _ = res + sat;
// let _ = &res + sat;
let _ = res + &sat;
// let _ = &res + &sat;
let _ = res.clone() - sat;
// let _ = &res.clone() - sat;
let _ = res.clone() - &sat;
// let _ = &res.clone() - &sat;
let _ = res - sat;
// let _ = &res - sat;
let _ = res - &sat;
// let _ = &res - &sat;
// Operations that where both sides are the result of another operation.
let _ = res.clone() + res.clone();
// let _ = &res.clone() + res.clone();
// let _ = res.clone() + &res.clone();
// let _ = &res.clone() + &res.clone();
let _ = res + res;
// let _ = &res + res;
// let _ = res + &res;
// let _ = &res + &res;
let _ = res.clone() - res.clone();
// let _ = &res.clone() - res.clone();
// let _ = res.clone() - &res.clone();
// let _ = &res.clone() - &res.clone();
let _ = res - res;
// let _ = &res - res;
// let _ = res - &res;
// let _ = &res - &res;
}
// Verify we have implemented all `Sum` for the `NumOpResult` type.
#[test]
fn amount_op_result_sum() {
let res = Amount::from_sat(1) + Amount::from_sat(1);
let amounts = [res.clone(), res.clone()];
let amounts = [res, res];
let amount_refs = [&res, &res];
// Sum iterators.