cel_cxx/values/
display.rs

1use super::{MapKey, Value};
2use itertools::Itertools;
3
4impl std::fmt::Display for Value {
5    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
6        match self {
7            Value::Null => write!(f, "null"),
8            Value::Bool(b) => write!(f, "{b}"),
9            Value::Int(i) => write!(f, "{i}"),
10            Value::Uint(u) => write!(f, "{u}"),
11            Value::Double(d) => write!(f, "{d}"),
12            Value::String(s) => write!(f, "{s:?}"),
13            Value::Bytes(b) => write!(f, "{}", display_bytes(b)),
14            Value::Struct(_s) => write!(f, ""),
15            Value::Duration(d) => write!(f, "{d}"),
16            Value::Timestamp(t) => write!(f, "{t}"),
17            Value::List(l) => write!(f, "[{}]", l.iter().format(", ")),
18            Value::Map(m) => write!(
19                f,
20                "{{{}}}",
21                m.iter()
22                    .format_with(", ", |(k, v), f| { f(&format_args!("{k}: {v}")) })
23            ),
24            Value::Unknown(_u) => write!(f, ""),
25            Value::Type(t) => write!(f, "{t}"),
26            Value::Error(e) => write!(f, "{e}"),
27            Value::Opaque(o) => write!(f, "{o}"),
28            Value::Optional(opt) => write!(f, "{opt}"),
29        }
30    }
31}
32
33impl std::fmt::Display for MapKey {
34    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
35        match self {
36            MapKey::Bool(b) => write!(f, "{b}"),
37            MapKey::Int(i) => write!(f, "{i}"),
38            MapKey::Uint(u) => write!(f, "{u}"),
39            MapKey::String(s) => write!(f, "{s:?}"),
40        }
41    }
42}
43
44fn display_bytes<B: AsRef<[u8]>>(buf: B) -> String {
45    String::from_utf8(
46        buf.as_ref()
47            .iter()
48            .flat_map(|b| std::ascii::escape_default(*b))
49            .collect(),
50    )
51    .unwrap()
52}