use super::*;
#[derive(Clone, Debug, Default)]
pub struct Boxed<M> {
mutator: M,
}
pub fn boxed<M>(mutator: M) -> Boxed<M> {
Boxed { mutator }
}
impl<M, T> Mutate<alloc::boxed::Box<T>> for Boxed<M>
where
M: Mutate<T>,
{
#[inline]
fn mutate(&mut self, c: &mut Candidates, value: &mut alloc::boxed::Box<T>) -> Result<()> {
self.mutator.mutate(c, value.as_mut())
}
#[inline]
fn mutation_count(
&self,
value: &alloc::boxed::Box<T>,
shrink: bool,
) -> core::option::Option<u32> {
self.mutator.mutation_count(value.as_ref(), shrink)
}
}
impl<M, T> Generate<alloc::boxed::Box<T>> for Boxed<M>
where
M: Generate<T>,
{
#[inline]
fn generate(&mut self, ctx: &mut Context) -> Result<alloc::boxed::Box<T>> {
Ok(alloc::boxed::Box::new(self.mutator.generate(ctx)?))
}
}
impl<T> DefaultMutate for alloc::boxed::Box<T>
where
T: DefaultMutate,
T::DefaultMutate: Generate<T>,
{
type DefaultMutate = Boxed<T::DefaultMutate>;
}