Implement Sum for an iterator of references to amounts
We have `iter::Sum` already for `Amount` and `SignedAmount`. Add an implementation for each to support iterators that yield references.
This commit is contained in:
parent
31f883ac00
commit
0369e64b56
|
@ -442,6 +442,16 @@ impl core::iter::Sum for SignedAmount {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl<'a> core::iter::Sum<&'a SignedAmount> for SignedAmount {
|
||||||
|
fn sum<I>(iter: I) -> Self
|
||||||
|
where
|
||||||
|
I: Iterator<Item = &'a SignedAmount>,
|
||||||
|
{
|
||||||
|
let sats: i64 = iter.map(|amt| amt.0).sum();
|
||||||
|
SignedAmount::from_sat(sats)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(feature = "arbitrary")]
|
#[cfg(feature = "arbitrary")]
|
||||||
impl<'a> Arbitrary<'a> for SignedAmount {
|
impl<'a> Arbitrary<'a> for SignedAmount {
|
||||||
fn arbitrary(u: &mut Unstructured<'a>) -> arbitrary::Result<Self> {
|
fn arbitrary(u: &mut Unstructured<'a>) -> arbitrary::Result<Self> {
|
||||||
|
|
|
@ -825,8 +825,8 @@ fn serde_as_sat_opt() {
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn sum_amounts() {
|
fn sum_amounts() {
|
||||||
assert_eq!(Amount::from_sat(0), [].into_iter().sum::<Amount>());
|
assert_eq!(Amount::from_sat(0), [].iter().sum::<Amount>());
|
||||||
assert_eq!(SignedAmount::from_sat(0), [].into_iter().sum::<SignedAmount>());
|
assert_eq!(SignedAmount::from_sat(0), [].iter().sum::<SignedAmount>());
|
||||||
|
|
||||||
let amounts = [Amount::from_sat(42), Amount::from_sat(1337), Amount::from_sat(21)];
|
let amounts = [Amount::from_sat(42), Amount::from_sat(1337), Amount::from_sat(21)];
|
||||||
let sum = amounts.into_iter().sum::<Amount>();
|
let sum = amounts.into_iter().sum::<Amount>();
|
||||||
|
|
|
@ -432,6 +432,16 @@ impl core::iter::Sum for Amount {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl<'a> core::iter::Sum<&'a Amount> for Amount {
|
||||||
|
fn sum<I>(iter: I) -> Self
|
||||||
|
where
|
||||||
|
I: Iterator<Item = &'a Amount>,
|
||||||
|
{
|
||||||
|
let sats: u64 = iter.map(|amt| amt.0).sum();
|
||||||
|
Amount::from_sat(sats)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(feature = "arbitrary")]
|
#[cfg(feature = "arbitrary")]
|
||||||
impl<'a> Arbitrary<'a> for Amount {
|
impl<'a> Arbitrary<'a> for Amount {
|
||||||
fn arbitrary(u: &mut Unstructured<'a>) -> arbitrary::Result<Self> {
|
fn arbitrary(u: &mut Unstructured<'a>) -> arbitrary::Result<Self> {
|
||||||
|
|
Loading…
Reference in New Issue