Skip to main content

nodedb_types/value/
display.rs

1// SPDX-License-Identifier: Apache-2.0
2
3//! [`std::fmt::Display`] implementation for [`Value`].
4
5use std::fmt;
6
7use crate::value::core::Value;
8
9impl fmt::Display for Value {
10    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
11        match self {
12            Value::Vector(v) => {
13                write!(f, "vector(")?;
14                let show = v.len().min(8);
15                for (i, elem) in v[..show].iter().enumerate() {
16                    if i > 0 {
17                        write!(f, ", ")?;
18                    }
19                    write!(f, "{elem}")?;
20                }
21                if v.len() > 8 {
22                    write!(f, ", … ({} total)", v.len())?;
23                }
24                write!(f, ")")
25            }
26            Value::Null => write!(f, "null"),
27            Value::Bool(b) => write!(f, "{b}"),
28            Value::Integer(i) => write!(f, "{i}"),
29            Value::Float(fl) => write!(f, "{fl}"),
30            Value::String(s) | Value::Uuid(s) | Value::Ulid(s) | Value::Regex(s) => {
31                write!(f, "{s}")
32            }
33            Value::Bytes(b) => write!(f, "<bytes:{}>", b.len()),
34            Value::Array(arr) | Value::Set(arr) => {
35                write!(f, "[")?;
36                for (i, v) in arr.iter().enumerate() {
37                    if i > 0 {
38                        write!(f, ", ")?;
39                    }
40                    write!(f, "{v}")?;
41                }
42                write!(f, "]")
43            }
44            Value::Object(map) => {
45                write!(f, "{{")?;
46                for (i, (k, v)) in map.iter().enumerate() {
47                    if i > 0 {
48                        write!(f, ", ")?;
49                    }
50                    write!(f, "{k}: {v}")?;
51                }
52                write!(f, "}}")
53            }
54            Value::DateTime(dt) | Value::NaiveDateTime(dt) => write!(f, "{dt}"),
55            Value::Duration(d) => write!(f, "{d}"),
56            Value::Decimal(d) => write!(f, "{d}"),
57            Value::Geometry(g) => write!(f, "{g:?}"),
58            Value::Range {
59                start,
60                end,
61                inclusive,
62            } => {
63                if let Some(s) = start {
64                    write!(f, "{s}")?;
65                }
66                if *inclusive {
67                    write!(f, "..=")?;
68                } else {
69                    write!(f, "..")?;
70                }
71                if let Some(e) = end {
72                    write!(f, "{e}")?;
73                }
74                Ok(())
75            }
76            Value::Record { table, id } => write!(f, "{table}:{id}"),
77            Value::ArrayCell(cell) => write!(f, "<array_cell coords={}>", cell.coords.len()),
78        }
79    }
80}