use serde::Serialize;
use std::fmt::Debug;
use crate::transform::Transform;
pub trait ToWrappedWith<T>: Debug + Clone + Serialize
where
T: Transform,
{
type Wrapper;
fn to_wrapped_with(self, transform: &T, options: &T::Options) -> Self::Wrapper;
}
pub trait WrapDataWith<D, T>: Sized
where
T: Transform,
D: ToWrappedWith<T>,
{
fn wrap_data_with(data: D, transform: &T, options: &T::Options) -> Self;
}
impl<D, T> WrapDataWith<D, T> for <D as ToWrappedWith<T>>::Wrapper
where
T: Transform,
D: ToWrappedWith<T>,
{
fn wrap_data_with(data: D, transform: &T, options: &<T as Transform>::Options) -> Self {
data.to_wrapped_with(transform, options)
}
}