Skip to main content

oxihuman_core/
query_bus.rs

1// Copyright (C) 2026 COOLJAPAN OU (Team KitaSan)
2// SPDX-License-Identifier: Apache-2.0
3#![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        /* create query with name */
54        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        /* set and get query params */
62        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        /* create query result */
71        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        /* failed result has success=false */
79        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        /* multiple params stored correctly */
86        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        /* data field returned correctly */
96        let r = new_query_result("Q", "payload", true);
97        assert_eq!(query_result_data(&r), "payload");
98    }
99}