1use crate::{ibig::IBig, ubig::UBig};
4use core::{
5 iter::{Product, Sum},
6 ops::{Add, Mul},
7};
8
9macro_rules! impl_fold_iter {
10 ($t:ty, $fold_trait:ident, $fold:ident, $op_trait:ident, $op:ident, $init:ident) => {
11 impl<T> $fold_trait<T> for $t
12 where
13 $t: $op_trait<T, Output = $t>,
14 {
15 fn $fold<I: Iterator<Item = T>>(iter: I) -> Self {
16 iter.fold(<$t>::$init, <$t>::$op)
17 }
18 }
19 };
20}
21
22impl_fold_iter!(UBig, Sum, sum, Add, add, ZERO);
23impl_fold_iter!(IBig, Sum, sum, Add, add, ZERO);
24impl_fold_iter!(UBig, Product, product, Mul, mul, ONE);
25impl_fold_iter!(IBig, Product, product, Mul, mul, ONE);