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

View File

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