use serde::de::DeserializeOwned;
use serde::ser::Serialize;
use std::io::{Read, Write};
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>> {
Json::canonicalize(raw_data)
}
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 to_writer<W, T: Sized>(writer: W, value: &T) -> Result<()>
where
W: Write,
T: Serialize,
{
Ok(serde_json::to_writer_pretty(
writer,
&Self::serialize(value)?,
)?)
}
fn from_reader<R, T>(rdr: R) -> Result<T>
where
R: Read,
T: DeserializeOwned,
{
Json::from_reader(rdr)
}
fn from_slice<T>(slice: &[u8]) -> Result<T>
where
T: DeserializeOwned,
{
Json::from_slice(slice)
}
}