#[allow(unused_imports)]
use crate::nostd_prelude::*;
mod key_maps;
mod value_conv;
use crate::cbor;
use crate::error::{DecodeError, EncodeError};
use serde::de::DeserializeOwned;
use serde::Serialize;
use serde_json;
pub use value_conv::{json_to_value, value_to_json};
pub fn to_json<T: Serialize>(value: &T) -> Result<String, EncodeError> {
let cbor_value = cbor::value::to_value(value)
.map_err(|e| EncodeError::Serialization(format!("to_value: {e}")))?;
let json_value = value_to_json(&cbor_value);
serde_json::to_string(&json_value).map_err(|e| EncodeError::Serialization(format!("json: {e}")))
}
pub fn to_json_pretty<T: Serialize>(value: &T) -> Result<String, EncodeError> {
let cbor_value = cbor::value::to_value(value)
.map_err(|e| EncodeError::Serialization(format!("to_value: {e}")))?;
let json_value = value_to_json(&cbor_value);
serde_json::to_string_pretty(&json_value)
.map_err(|e| EncodeError::Serialization(format!("json: {e}")))
}
pub fn from_json<T: DeserializeOwned>(json_str: &str) -> Result<T, DecodeError> {
let json_value: serde_json::Value = serde_json::from_str(json_str)
.map_err(|e| DecodeError::Deserialization(format!("json parse: {e}")))?;
let cbor_value = json_to_value(&json_value);
cbor::value::from_value(&cbor_value)
.map_err(|e| DecodeError::Deserialization(format!("from_value: {e}")))
}