use datavalue::OwnedDataValue;
use serde_json::Value;
#[inline]
pub(crate) fn owned_from_serde(v: &Value) -> OwnedDataValue {
OwnedDataValue::from(v)
}
pub(crate) fn owned_to_serde(v: &OwnedDataValue) -> Value {
match v {
#[cfg(feature = "datetime")]
OwnedDataValue::DateTime(dt) => datetime_sentinel("datetime", dt.to_iso_string()),
#[cfg(feature = "datetime")]
OwnedDataValue::Duration(d) => datetime_sentinel("timestamp", d.to_string()),
OwnedDataValue::Array(items) => Value::Array(items.iter().map(owned_to_serde).collect()),
OwnedDataValue::Object(pairs) => Value::Object(
pairs
.iter()
.map(|(k, v)| (k.clone(), owned_to_serde(v)))
.collect(),
),
other => other.to_serde_value(),
}
}
#[cfg(feature = "datetime")]
#[inline]
pub(crate) fn datetime_sentinel(key: &str, payload: String) -> Value {
let mut map = serde_json::Map::new();
map.insert(key.to_string(), Value::String(payload));
Value::Object(map)
}