use sealed::sealed;
use serde::de::Error;
use serde::Deserialize;
use serde_json::Value;
#[sealed]
pub trait DeserializeExt {
fn pointer_and_deserialize<'de, T, E>(&'de self, pointer: &'static str) -> Result<T, E>
where
T: Deserialize<'de>,
E: Error;
}
#[sealed]
impl DeserializeExt for Value {
fn pointer_and_deserialize<'de, T, E>(&'de self, pointer: &'static str) -> Result<T, E>
where
T: Deserialize<'de>,
E: Error,
{
let raw_ret = self
.pointer(pointer)
.ok_or_else(|| E::missing_field(pointer))?;
T::deserialize(raw_ret).map_err(E::custom)
}
}