easyofd_core/
integrity.rs1#[derive(Debug, Clone, Default)]
11pub struct OFDEntries {
12 pub entries: Vec<(String, String)>,
14}
15
16impl OFDEntries {
17 #[must_use]
19 pub fn new() -> Self {
20 Self::default()
21 }
22
23 pub fn add(&mut self, path: impl Into<String>, digest: impl Into<String>) {
25 self.entries.push((path.into(), digest.into()));
26 }
27
28 #[must_use]
30 pub fn len(&self) -> usize {
31 self.entries.len()
32 }
33
34 #[must_use]
36 pub fn is_empty(&self) -> bool {
37 self.entries.is_empty()
38 }
39
40 #[must_use]
42 pub fn find(&self, path: &str) -> Option<&str> {
43 self.entries
44 .iter()
45 .find(|(p, _)| p == path)
46 .map(|(_, d)| d.as_str())
47 }
48}
49
50#[cfg(test)]
51mod tests {
52 use super::*;
53
54 #[test]
55 fn ofd_entries_new() {
56 let e = OFDEntries::new();
57 assert!(e.is_empty());
58 }
59
60 #[test]
61 fn ofd_entries_add() {
62 let mut e = OFDEntries::new();
63 e.add("OFD.xml", "abc123");
64 e.add("Doc_0/Document.xml", "def456");
65 assert_eq!(e.len(), 2);
66 }
67
68 #[test]
69 fn ofd_entries_find() {
70 let mut e = OFDEntries::new();
71 e.add("OFD.xml", "hash1");
72 assert_eq!(e.find("OFD.xml"), Some("hash1"));
73 assert_eq!(e.find("missing"), None);
74 }
75}