agent_tui/common/
json_ext.rs

1use serde_json::Value;
2
3pub trait ValueExt {
4    fn str_or<'a>(&'a self, key: &str, default: &'a str) -> &'a str;
5    fn u64_or(&self, key: &str, default: u64) -> u64;
6    fn bool_or(&self, key: &str, default: bool) -> bool;
7    fn str_array_join(&self, key: &str, sep: &str) -> String;
8}
9
10impl ValueExt for Value {
11    fn str_or<'a>(&'a self, key: &str, default: &'a str) -> &'a str {
12        self.get(key).and_then(|v| v.as_str()).unwrap_or(default)
13    }
14
15    fn u64_or(&self, key: &str, default: u64) -> u64 {
16        self.get(key).and_then(|v| v.as_u64()).unwrap_or(default)
17    }
18
19    fn bool_or(&self, key: &str, default: bool) -> bool {
20        self.get(key).and_then(|v| v.as_bool()).unwrap_or(default)
21    }
22
23    fn str_array_join(&self, key: &str, sep: &str) -> String {
24        self.get(key)
25            .and_then(|v| v.as_array())
26            .map(|arr| {
27                arr.iter()
28                    .filter_map(|v| v.as_str())
29                    .collect::<Vec<_>>()
30                    .join(sep)
31            })
32            .unwrap_or_default()
33    }
34}