MCPcopy Create free account
hub / github.com/NodeDB-Lab/nodedb / rmpv_to_json

Function rmpv_to_json

nodedb/src/engine/document/store/extract.rs:129–160  ·  view source on GitHub ↗

Convert rmpv::Value back to serde_json::Value.

(val: &rmpv::Value)

Source from the content-addressed store, hash-verified

127
128/// Convert rmpv::Value back to serde_json::Value.
129pub(crate) fn rmpv_to_json(val: &rmpv::Value) -> serde_json::Value {
130 match val {
131 rmpv::Value::Nil => serde_json::Value::Null,
132 rmpv::Value::Boolean(b) => serde_json::Value::Bool(*b),
133 rmpv::Value::Integer(i) => {
134 if let Some(n) = i.as_i64() {
135 serde_json::json!(n)
136 } else if let Some(n) = i.as_u64() {
137 serde_json::json!(n)
138 } else {
139 serde_json::Value::Null
140 }
141 }
142 rmpv::Value::F32(f) => serde_json::json!(*f),
143 rmpv::Value::F64(f) => serde_json::json!(*f),
144 rmpv::Value::String(s) => serde_json::Value::String(s.as_str().unwrap_or("").to_string()),
145 rmpv::Value::Binary(b) => serde_json::Value::String(base64_encode(b)),
146 rmpv::Value::Array(arr) => serde_json::Value::Array(arr.iter().map(rmpv_to_json).collect()),
147 rmpv::Value::Map(entries) => {
148 let mut obj = serde_json::Map::new();
149 for (k, v) in entries {
150 let key = match k {
151 rmpv::Value::String(s) => s.as_str().unwrap_or("").to_string(),
152 other => format!("{other}"),
153 };
154 obj.insert(key, rmpv_to_json(v));
155 }
156 serde_json::Value::Object(obj)
157 }
158 rmpv::Value::Ext(_, _) => serde_json::Value::Null,
159 }
160}
161
162fn base64_encode(data: &[u8]) -> String {
163 const CHARS: &[u8] = b"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

Callers 2

getMethod · 0.50

Calls 8

to_stringMethod · 0.80
collectMethod · 0.80
base64_encodeFunction · 0.70
as_i64Method · 0.45
as_u64Method · 0.45
as_strMethod · 0.45
iterMethod · 0.45
insertMethod · 0.45

Tested by 1