use-event-log 0.1.0

Append-only in-memory event log wrapper for RustUse events.
Documentation
#![forbid(unsafe_code)]
#![doc = include_str!("../README.md")]

#[derive(Clone, Debug, Default, Eq, PartialEq)]
pub struct EventLog<E> {
    entries: Vec<E>,
}

impl<E> EventLog<E> {
    pub const fn new() -> Self {
        Self {
            entries: Vec::new(),
        }
    }

    pub fn append(&mut self, event: E) {
        self.entries.push(event);
    }

    pub fn entries(&self) -> &[E] {
        &self.entries
    }

    pub fn last(&self) -> Option<&E> {
        self.entries.last()
    }

    pub fn len(&self) -> usize {
        self.entries.len()
    }

    pub fn is_empty(&self) -> bool {
        self.entries.is_empty()
    }
}

#[cfg(test)]
mod tests {
    use super::EventLog;

    #[test]
    fn appends_entries_in_order() {
        let mut log = EventLog::new();
        log.append("command.started");
        log.append("command.finished");

        assert_eq!(log.entries(), ["command.started", "command.finished"]);
        assert_eq!(log.last(), Some(&"command.finished"));
        assert_eq!(log.len(), 2);
    }

    #[test]
    fn starts_empty() {
        let log = EventLog::<&str>::default();

        assert!(log.is_empty());
    }
}