use serde::de::DeserializeOwned;
use serde::ser::Serialize;
use super::Json;
use crate::interchange::DataInterchange;
use crate::Result;
#[derive(Debug, Clone, PartialEq)]
pub struct JsonPretty;
impl DataInterchange for JsonPretty {
type RawData = serde_json::Value;
fn extension() -> &'static str {
Json::extension()
}
fn canonicalize(raw_data: &Self::RawData) -> Result<Vec<u8>> {
let bytes = Json::canonicalize(raw_data)?;
Ok(serde_json::to_vec_pretty(&Self::from_slice::<
Self::RawData,
>(&bytes)?)?)
}
fn deserialize<T>(raw_data: &Self::RawData) -> Result<T>
where
T: DeserializeOwned,
{
Json::deserialize(raw_data)
}
fn serialize<T>(data: &T) -> Result<Self::RawData>
where
T: Serialize,
{
Json::serialize(data)
}
fn from_slice<T>(slice: &[u8]) -> Result<T>
where
T: DeserializeOwned,
{
Json::from_slice(slice)
}
}