use serde::de::DeserializeOwned;
use serde::Serialize;
use super::ValueError;
pub trait AsType<'a, T>: Sized {
fn from_value(value: &'a T) -> ValueResult<Self, ValueError>;
}
pub type ValueResult<T, E> = core::result::Result<T, E>;
pub trait PointerValueExt {
type Item;
type Error;
fn get_path(&self, name_or_pointer: &str) -> ValueResult<&Self::Item, Self::Error>;
fn take_path(&mut self, name_or_pointer: &str) -> ValueResult<Self::Item, Self::Error>;
}
pub trait DynamicValueExt {
type Item;
type Error;
fn d_new() -> Self::Item;
fn d_get<T: DeserializeOwned>(&self, name_or_pointer: &str) -> ValueResult<T, Self::Error>;
fn d_get_as<'a, V: AsType<'a, Self::Item>>(
&'a self,
name_or_pointer: &str,
) -> ValueResult<V, Self::Error>;
fn d_take<T: DeserializeOwned>(&mut self, name_or_pointer: &str)
-> ValueResult<T, Self::Error>;
fn d_insert<T: Serialize>(
&mut self,
name_or_pointer: &str,
value: T,
) -> ValueResult<(), Self::Error>;
fn d_pretty(&self) -> ValueResult<String, Self::Error>;
}