Skip to main content

krait/output/
json.rs

1use crate::protocol::Response;
2
3/// Format response as raw JSON for programmatic consumption.
4#[must_use]
5pub fn format(response: &Response) -> String {
6    if let Some(error) = &response.error {
7        return serde_json::to_string(error).unwrap_or_default();
8    }
9
10    let Some(data) = &response.data else {
11        return String::new();
12    };
13
14    serde_json::to_string(data).unwrap_or_default()
15}
16
17#[cfg(test)]
18mod tests {
19    use serde_json::json;
20
21    use super::*;
22
23    #[test]
24    fn json_status_output() {
25        let resp = Response::ok(json!({"daemon": {"pid": 12345, "uptime_secs": 300}}));
26        let out = format(&resp);
27        let parsed: serde_json::Value = serde_json::from_str(&out).unwrap();
28        assert_eq!(parsed["daemon"]["pid"], 12345);
29    }
30
31    #[test]
32    fn json_error_output() {
33        let resp = Response::err("not_found", "Symbol not found");
34        let out = format(&resp);
35        let parsed: serde_json::Value = serde_json::from_str(&out).unwrap();
36        assert_eq!(parsed["code"], "not_found");
37    }
38}