#![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());
}
}