#[derive(Debug, Clone, Default)]
pub struct OFDEntries {
pub entries: Vec<(String, String)>,
}
impl OFDEntries {
#[must_use]
pub fn new() -> Self {
Self::default()
}
pub fn add(&mut self, path: impl Into<String>, digest: impl Into<String>) {
self.entries.push((path.into(), digest.into()));
}
#[must_use]
pub fn len(&self) -> usize {
self.entries.len()
}
#[must_use]
pub fn is_empty(&self) -> bool {
self.entries.is_empty()
}
#[must_use]
pub fn find(&self, path: &str) -> Option<&str> {
self.entries
.iter()
.find(|(p, _)| p == path)
.map(|(_, d)| d.as_str())
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn ofd_entries_new() {
let e = OFDEntries::new();
assert!(e.is_empty());
}
#[test]
fn ofd_entries_add() {
let mut e = OFDEntries::new();
e.add("OFD.xml", "abc123");
e.add("Doc_0/Document.xml", "def456");
assert_eq!(e.len(), 2);
}
#[test]
fn ofd_entries_find() {
let mut e = OFDEntries::new();
e.add("OFD.xml", "hash1");
assert_eq!(e.find("OFD.xml"), Some("hash1"));
assert_eq!(e.find("missing"), None);
}
}