pub(crate) mod cjson;
pub use cjson::{Json, JsonPretty};
use serde::de::DeserializeOwned;
use serde::ser::Serialize;
use std::fmt::Debug;
use std::io::{Read, Write};
use crate::Result;
pub trait DataInterchange: Debug + PartialEq + Clone {
type RawData: Serialize + DeserializeOwned + Clone + PartialEq;
fn extension() -> &'static str;
fn canonicalize(raw_data: &Self::RawData) -> Result<Vec<u8>>;
fn deserialize<T>(raw_data: &Self::RawData) -> Result<T>
where
T: DeserializeOwned;
fn serialize<T>(data: &T) -> Result<Self::RawData>
where
T: Serialize;
#[allow(clippy::wrong_self_convention)]
fn to_writer<W, T: Sized>(writer: W, value: &T) -> Result<()>
where
W: Write,
T: Serialize;
fn from_reader<R, T>(rdr: R) -> Result<T>
where
R: Read,
T: DeserializeOwned;
fn from_slice<T>(slice: &[u8]) -> Result<T>
where
T: DeserializeOwned;
}