oxihuman_core/
query_bus.rs1#![allow(dead_code)]
4
5pub struct Query {
6 pub name: String,
7 pub params: std::collections::HashMap<String, String>,
8}
9
10pub struct QueryResult {
11 pub name: String,
12 pub data: String,
13 pub success: bool,
14}
15
16pub fn new_query(name: &str) -> Query {
17 Query {
18 name: name.to_string(),
19 params: std::collections::HashMap::new(),
20 }
21}
22
23pub fn query_set_param(q: &mut Query, key: &str, val: &str) {
24 q.params.insert(key.to_string(), val.to_string());
25}
26
27pub fn query_get_param<'a>(q: &'a Query, key: &str) -> Option<&'a str> {
28 q.params.get(key).map(|s| s.as_str())
29}
30
31pub fn new_query_result(name: &str, data: &str, success: bool) -> QueryResult {
32 QueryResult {
33 name: name.to_string(),
34 data: data.to_string(),
35 success,
36 }
37}
38
39pub fn query_result_is_success(r: &QueryResult) -> bool {
40 r.success
41}
42
43pub fn query_result_data(r: &QueryResult) -> &str {
44 &r.data
45}
46
47#[cfg(test)]
48mod tests {
49 use super::*;
50
51 #[test]
52 fn test_new_query() {
53 let q = new_query("GetUser");
55 assert_eq!(q.name, "GetUser");
56 assert!(q.params.is_empty());
57 }
58
59 #[test]
60 fn test_query_set_get_param() {
61 let mut q = new_query("Find");
63 query_set_param(&mut q, "id", "42");
64 assert_eq!(query_get_param(&q, "id"), Some("42"));
65 assert_eq!(query_get_param(&q, "missing"), None);
66 }
67
68 #[test]
69 fn test_new_query_result() {
70 let r = new_query_result("GetUser", "data", true);
72 assert!(query_result_is_success(&r));
73 assert_eq!(query_result_data(&r), "data");
74 }
75
76 #[test]
77 fn test_query_result_failure() {
78 let r = new_query_result("Find", "error", false);
80 assert!(!query_result_is_success(&r));
81 }
82
83 #[test]
84 fn test_query_multiple_params() {
85 let mut q = new_query("Search");
87 query_set_param(&mut q, "a", "1");
88 query_set_param(&mut q, "b", "2");
89 assert_eq!(query_get_param(&q, "a"), Some("1"));
90 assert_eq!(query_get_param(&q, "b"), Some("2"));
91 }
92
93 #[test]
94 fn test_query_result_data() {
95 let r = new_query_result("Q", "payload", true);
97 assert_eq!(query_result_data(&r), "payload");
98 }
99}