use serde::de::DeserializeOwned;
use serde::{Deserialize, Serialize};
use serde_json::Value;
#[derive(Clone, PartialEq, Hash, Serialize, Deserialize)]
#[serde(transparent)]
pub struct Json {
pub(crate) inner: Value,
}
pub fn from_json<T: DeserializeOwned>(json: Json) -> crate::Result<T> {
serde_json::from_value(json.inner).map_err(|e| crate::Error::from(std::io::Error::from(e)))
}
impl std::fmt::Debug for Json {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
self.inner.fmt(f)
}
}
impl Json {
#[cfg(feature = "serde_json")]
#[cfg_attr(docsrs, doc(cfg(feature = "serde_json")))]
pub fn into_inner(self) -> serde_json::Value {
self.inner
}
pub(crate) fn new(json: serde_json::Value) -> Self {
Self { inner: json }
}
}