reifydb_value/value/
json.rs1use serde_json::{Map, Value as JsonValue};
5
6use super::Value;
7use crate::util::hex::encode;
8
9impl Value {
10 pub fn to_json_value(&self) -> JsonValue {
11 match self {
12 Value::None {
13 ..
14 } => JsonValue::Null,
15 Value::Boolean(b) => JsonValue::Bool(*b),
16 Value::Int1(i) => JsonValue::String(i.to_string()),
17 Value::Int2(i) => JsonValue::String(i.to_string()),
18 Value::Int4(i) => JsonValue::String(i.to_string()),
19 Value::Int8(i) => JsonValue::String(i.to_string()),
20 Value::Int16(i) => JsonValue::String(i.to_string()),
21 Value::Uint1(u) => JsonValue::String(u.to_string()),
22 Value::Uint2(u) => JsonValue::String(u.to_string()),
23 Value::Uint4(u) => JsonValue::String(u.to_string()),
24 Value::Uint8(u) => JsonValue::String(u.to_string()),
25 Value::Uint16(u) => JsonValue::String(u.to_string()),
26 Value::Float4(f) => {
27 let v: f32 = **f;
28 if v.is_finite() {
29 JsonValue::String(f.to_string())
30 } else {
31 JsonValue::Null
32 }
33 }
34 Value::Float8(f) => {
35 let v: f64 = **f;
36 if v.is_finite() {
37 JsonValue::String(f.to_string())
38 } else {
39 JsonValue::Null
40 }
41 }
42 Value::Utf8(s) => JsonValue::String(s.clone()),
43 Value::Decimal(d) => JsonValue::String(d.to_string()),
44 Value::Uuid4(u) => JsonValue::String(u.to_string()),
45 Value::Uuid7(u) => JsonValue::String(u.to_string()),
46 Value::IdentityId(id) => JsonValue::String(id.to_string()),
47 Value::Date(d) => JsonValue::String(d.to_string()),
48 Value::DateTime(dt) => JsonValue::String(dt.to_string()),
49 Value::Time(t) => JsonValue::String(t.to_string()),
50 Value::Duration(d) => JsonValue::String(d.to_iso_string()),
51 Value::Blob(b) => JsonValue::String(b.to_string()),
52 Value::DictionaryId(id) => JsonValue::String(id.to_string()),
53 Value::Type(t) => JsonValue::String(t.to_string()),
54 Value::Any(v) => v.to_json_value(),
55 Value::List(items) => JsonValue::Array(items.iter().map(|v| v.to_json_value()).collect()),
56 Value::Record(fields) => {
57 let map: Map<String, JsonValue> =
58 fields.iter().map(|(k, v)| (k.clone(), v.to_json_value())).collect();
59 JsonValue::Object(map)
60 }
61 Value::Tuple(items) => JsonValue::Array(items.iter().map(|v| v.to_json_value()).collect()),
62 Value::Digest(digest) => JsonValue::String(format!("0x{}", encode(&digest.encode()))),
63 }
64 }
65}