1use crate::protocol::Response;
2
3#[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}