message: Implement Sum for Decimal types
  Resolves
diff: @@ -286,6 +286,14 @@ impl ops::Add for Decimal {
  }
  }
  +impl ops::Add<&Decimal> for Decimal {
  + type Output = Self;
  +
  + fn add(self, other: &Decimal) -> Self {
  + Decimal(self.0 + other.0)
  + }
  +}
  +
  impl ops::Sub for Decimal {
  type Output = Self;
  @@ -351,6 +359,15 @@ impl ops::DivAssign<Uint128> for Decimal {
  }
  }
  +impl<A> std::iter::Sum<A> for Decimal
  +where
  + Decimal: ops::Add<A, Output = Decimal>,
  +{
  + fn sum<I: Iterator<Item = A>>(iter: I) -> Self {
  + iter.fold(Self::zero(), |a, b| a + b)
  + }
  +}
  +
  /// Serializes as a decimal string
  impl Serialize for Decimal {
  fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
  @@ -1134,6 +1151,20 @@ mod tests {
  );
  }
  + #[test]
  + fn decimal_iter_sum() {
  + let items = vec![
  + Decimal::zero(),
  + Decimal(Uint128::from(2u128)),
  + Decimal(Uint128::from(2u128)),
  + ];
  + assert_eq!(items.iter().sum::<Decimal>(), Decimal(Uint128::from(4u128)));
  + assert_eq!(
  + items.into_iter().sum::<Decimal>(),
  + Decimal(Uint128::from(4u128))
  + )
  + }
  +
  #[test]
  fn decimal_serialize() {
  assert_eq!(to_vec(&Decimal::zero()).unwrap(), br#""0""#);
  