mzdeisotoper 0.1.4

Deisotoping and charge state deconvolution of mass spectrometry files
Documentation
use std::{
    iter::Sum,
    ops::{Add, AddAssign},
};

#[derive(Debug, Default, Clone, Copy, PartialEq)]
pub struct ProgressRecord {
    pub ms1_peaks: usize,
    pub msn_peaks: usize,
    pub precursors_defaulted: usize,
    pub precursor_charge_state_mismatch: usize,
    pub ms1_spectra: usize,
    pub msn_spectra: usize,
}

impl ProgressRecord {
    pub fn sum(mut self, other: ProgressRecord) -> ProgressRecord {
        self += other;
        self
    }
}

impl Add for ProgressRecord {
    type Output = ProgressRecord;

    fn add(self, rhs: Self) -> Self::Output {
        let mut dup = self;
        dup += rhs;
        dup
    }
}

impl AddAssign for ProgressRecord {
    fn add_assign(&mut self, rhs: Self) {
        self.ms1_peaks += rhs.ms1_peaks;
        self.msn_peaks += rhs.msn_peaks;
        self.precursors_defaulted += rhs.precursors_defaulted;
        self.precursor_charge_state_mismatch += rhs.precursor_charge_state_mismatch;
        self.ms1_spectra += rhs.ms1_spectra;
        self.msn_spectra += rhs.msn_spectra;
    }
}

impl Sum for ProgressRecord {
    fn sum<I: Iterator<Item = Self>>(iter: I) -> Self {
        iter.fold(ProgressRecord::default(), |mut a, b| {
            a += b;
            a
        })
    }
}