#[cfg(feature = "serde_json")]
pub use serde_impl::data_to_value;
#[cfg(feature = "serde_json")]
pub use serde_impl::value_to_data;
#[cfg(feature = "serde_json")]
mod serde_impl {
use super::super::DataValue;
use bumpalo::Bump;
use serde_json::Value;
pub fn data_to_value(v: &DataValue<'_>) -> Value {
match v {
#[cfg(feature = "datetime")]
DataValue::DateTime(dt) => {
crate::serde_bridge::datetime_sentinel("datetime", dt.to_iso_string())
}
#[cfg(feature = "datetime")]
DataValue::Duration(d) => {
crate::serde_bridge::datetime_sentinel("timestamp", d.to_string())
}
DataValue::Array(items) => Value::Array(items.iter().map(data_to_value).collect()),
DataValue::Object(pairs) => {
let mut map = serde_json::Map::new();
for (k, v) in *pairs {
map.insert((*k).to_string(), data_to_value(v));
}
Value::Object(map)
}
other => other.to_serde_value(),
}
}
pub fn value_to_data<'a>(v: &Value, arena: &'a Bump) -> DataValue<'a> {
DataValue::from_serde_value_in(v, arena)
}
}