agent_tui/common/
json_ext.rs1use 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}