Skip to main content

use_event_log/
lib.rs

1#![forbid(unsafe_code)]
2#![doc = include_str!("../README.md")]
3
4#[derive(Clone, Debug, Default, Eq, PartialEq)]
5pub struct EventLog<E> {
6    entries: Vec<E>,
7}
8
9impl<E> EventLog<E> {
10    pub const fn new() -> Self {
11        Self {
12            entries: Vec::new(),
13        }
14    }
15
16    pub fn append(&mut self, event: E) {
17        self.entries.push(event);
18    }
19
20    pub fn entries(&self) -> &[E] {
21        &self.entries
22    }
23
24    pub fn last(&self) -> Option<&E> {
25        self.entries.last()
26    }
27
28    pub fn len(&self) -> usize {
29        self.entries.len()
30    }
31
32    pub fn is_empty(&self) -> bool {
33        self.entries.is_empty()
34    }
35}
36
37#[cfg(test)]
38mod tests {
39    use super::EventLog;
40
41    #[test]
42    fn appends_entries_in_order() {
43        let mut log = EventLog::new();
44        log.append("command.started");
45        log.append("command.finished");
46
47        assert_eq!(log.entries(), ["command.started", "command.finished"]);
48        assert_eq!(log.last(), Some(&"command.finished"));
49        assert_eq!(log.len(), 2);
50    }
51
52    #[test]
53    fn starts_empty() {
54        let log = EventLog::<&str>::default();
55
56        assert!(log.is_empty());
57    }
58}