oxihuman_core/
repository_stub.rs1#![allow(dead_code)]
4
5pub struct StringRepo {
6 pub store: std::collections::HashMap<String, String>,
7}
8
9pub fn new_string_repo() -> StringRepo {
10 StringRepo {
11 store: std::collections::HashMap::new(),
12 }
13}
14
15pub fn repo_save(r: &mut StringRepo, id: &str, data: &str) {
16 r.store.insert(id.to_string(), data.to_string());
17}
18
19pub fn repo_find<'a>(r: &'a StringRepo, id: &str) -> Option<&'a str> {
20 r.store.get(id).map(|s| s.as_str())
21}
22
23pub fn repo_delete(r: &mut StringRepo, id: &str) -> bool {
24 r.store.remove(id).is_some()
25}
26
27pub fn repo_count(r: &StringRepo) -> usize {
28 r.store.len()
29}
30
31pub fn repo_all_ids(r: &StringRepo) -> Vec<String> {
32 let mut ids: Vec<String> = r.store.keys().cloned().collect();
33 ids.sort();
34 ids
35}
36
37pub fn repo_exists(r: &StringRepo, id: &str) -> bool {
38 r.store.contains_key(id)
39}
40
41#[cfg(test)]
42mod tests {
43 use super::*;
44
45 #[test]
46 fn test_save_and_find() {
47 let mut r = new_string_repo();
49 repo_save(&mut r, "1", "Alice");
50 assert_eq!(repo_find(&r, "1"), Some("Alice"));
51 }
52
53 #[test]
54 fn test_find_missing() {
55 let r = new_string_repo();
57 assert_eq!(repo_find(&r, "99"), None);
58 }
59
60 #[test]
61 fn test_delete() {
62 let mut r = new_string_repo();
64 repo_save(&mut r, "1", "data");
65 assert!(repo_delete(&mut r, "1"));
66 assert!(!repo_exists(&r, "1"));
67 }
68
69 #[test]
70 fn test_delete_missing() {
71 let mut r = new_string_repo();
73 assert!(!repo_delete(&mut r, "x"));
74 }
75
76 #[test]
77 fn test_count() {
78 let mut r = new_string_repo();
80 repo_save(&mut r, "a", "1");
81 repo_save(&mut r, "b", "2");
82 assert_eq!(repo_count(&r), 2);
83 }
84
85 #[test]
86 fn test_all_ids() {
87 let mut r = new_string_repo();
89 repo_save(&mut r, "b", "2");
90 repo_save(&mut r, "a", "1");
91 let ids = repo_all_ids(&r);
92 assert_eq!(ids, vec!["a", "b"]);
93 }
94
95 #[test]
96 fn test_exists() {
97 let mut r = new_string_repo();
99 repo_save(&mut r, "x", "v");
100 assert!(repo_exists(&r, "x"));
101 assert!(!repo_exists(&r, "y"));
102 }
103}