use crate::MultiValues;
use crate::Value;
use crate::ValueError;
use crate::ValueResult;
mod internal;
use self::internal::sealed::Sealed;
pub trait StrictValueRead: Sized + Sealed {
#[doc(hidden)]
fn read_scalar(value: &Value) -> ValueResult<Self>;
#[doc(hidden)]
fn read_collection_first(values: &MultiValues) -> ValueResult<Self>;
#[doc(hidden)]
fn read_collection_list(values: &MultiValues) -> ValueResult<Vec<Self>>;
}
impl<T> StrictValueRead for T
where
for<'a> T: TryFrom<&'a Value, Error = ValueError> + TryFrom<&'a MultiValues, Error = ValueError>,
for<'a> Vec<T>: TryFrom<&'a MultiValues, Error = ValueError>,
{
#[inline(always)]
fn read_scalar(value: &Value) -> ValueResult<Self> {
value.get()
}
#[inline(always)]
fn read_collection_first(values: &MultiValues) -> ValueResult<Self> {
values.get_first()
}
#[inline(always)]
fn read_collection_list(values: &MultiValues) -> ValueResult<Vec<Self>> {
values.get()
}
}