cel_cxx/values/
display.rs1use 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}