use std::fmt;

#[repr(C)]
#[derive(Clone, Copy)]
pub struct Statistics {
    pub data_total: u64,
    pub data_rate: u32,
    pub message_total: u64,
    pub message_rate: u32,
    pub error_total: u64,
    pub error_rate: u32,
}

impl Default for Statistics {
    fn default() -> Self {
        Self {
            data_total: 0,
            data_rate: 0,
            message_total: 0,
            message_rate: 0,
            error_total: 0,
            error_rate: 0,
        }
    }
}

impl fmt::Display for Statistics {
    #[rustfmt::skip]
    fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
        write!(formatter,
               "{:>8} bytes {:>8} bytes/s {:>8} messages {:>8} messages/s {:>8} errors {:>8} errors/s",
               self.data_total,
               self.data_rate,
               self.message_total,
               self.message_rate,
               self.error_total,
               self.error_rate)
    }
}