Skip to main content

oxihuman_core/
repository_stub.rs

1// Copyright (C) 2026 COOLJAPAN OU (Team KitaSan)
2// SPDX-License-Identifier: Apache-2.0
3#![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        /* save and find by id */
48        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        /* missing id returns None */
56        let r = new_string_repo();
57        assert_eq!(repo_find(&r, "99"), None);
58    }
59
60    #[test]
61    fn test_delete() {
62        /* delete removes entry */
63        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        /* delete of missing key returns false */
72        let mut r = new_string_repo();
73        assert!(!repo_delete(&mut r, "x"));
74    }
75
76    #[test]
77    fn test_count() {
78        /* count tracks number of entries */
79        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        /* all_ids returns sorted ids */
88        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        /* exists checks presence */
98        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}