constructor(result = {}) {
        // counts
        this.delivered = 0;
        this.opened = 0;
        this.temporaryFailed = 0;
        this.permanentFailed = 0;
        this.unsubscribed = 0;
        this.complained = 0;
        this.unhandled = 0;
        this.unprocessable = 0;

        // processing failures are counted separately in addition to event type counts
        this.processingFailures = 0;

        // ids seen whilst processing ready for passing to the stats aggregator
        this.emailIds = [];
        this.memberIds = [];

        this.merge(result);
    }
@param {object} result
@param {number} [result.delivered]
@param {number} [result.opened]
@param {number} [result.temporaryFailed]
@param {number} [result.permanentFailed]
@param {number} [result.unsubscribed]
@param {number} [result.complained]
@param {number} [result.unhandled]
@param {number} [result.unprocessable]
@param {number} [result.processingFailures]
@param {string[]} [result.emailIds]
@param {string[]} [result.memberIds]