use super::*;
pub trait Item: Sized {
type Container;
type Inner;
fn from_container(container: <Self as Item>::Container, message: String) -> Result<Self, Error>;
}
impl<T> Item for Option<T> {
type Container = Self;
type Inner = T;
fn from_container(container: <Self as Item>::Container, message: String) -> Result<Self, Error> {
Ok(container)
}
}
impl<T> Item for Vec<T> {
type Container = Self;
type Inner = T;
fn from_container(container: <Self as Item>::Container, message: String) -> Result<Self, Error> {
Ok(container)
}
}
impl<'freeze, T> Item for T
where T: Freeze<'freeze>
{
type Container = Option<Self>;
type Inner = Self;
fn from_container(container: <Self as Item>::Container, message: String) -> Result<Self, Error> {
container.ok_or_else(|| Error::MissingValue(message))
}
}
pub trait ItemBuilder<'freeze> {
type Builder: Builder<'freeze>;
}