mod traversable_result;
use fmap::Functor;
pub use one_dto_mapper_derive::*;
pub use traversable_result::TraversableResult;
pub fn convert_inner<'a, T, A>(outer: T) -> T::Mapped
where
T: Functor<'a, A>,
T::Inner: Into<A>,
{
outer.fmap(Into::into)
}
pub fn convert_inner_of_inner<'a, T, K, A: 'a>(outer: T) -> T::Mapped
where
T: Functor<'a, K>,
T::Inner: Functor<'a, A, Mapped = K>,
<T::Inner as Functor<'a, A>>::Inner: Into<A>,
{
outer.fmap(convert_inner)
}
pub fn iterable_into<T, C, R>(input: C) -> R
where
C: IntoIterator,
C::Item: Into<T>,
R: FromIterator<T>,
{
input.into_iter().map(Into::into).collect()
}
pub fn try_convert_inner<T, A>(outer: T) -> Result<T::Mapped, <T::Inner as TryInto<A>>::Error>
where
T: TraversableResult<A>,
T::Inner: TryInto<A>,
{
outer.traverse(TryInto::try_into)
}
pub fn iterable_try_into<T, C, R>(input: C) -> Result<R, <C::Item as TryInto<T>>::Error>
where
C: IntoIterator,
C::Item: TryInto<T>,
R: FromIterator<T>,
{
input.into_iter().map(TryInto::try_into).collect()
}