mockiato 0.9.1

A strict, yet friendly mocking library for Rust 2018
use crate::matcher::ArgumentsMatcher;
use crate::return_value::ReturnValueGenerator;
use std::rc::Rc;

#[cfg(rustc_is_nightly)]
use crate::return_value::Cloned;

pub(crate) trait DefaultReturnValue<A>: Sized {
    fn default_return_value() -> Option<Rc<dyn ReturnValueGenerator<A, Self>>> {
        None
    }
}

impl<A, T> DefaultReturnValue<A> for T where A: for<'args> ArgumentsMatcher<'args> {}

#[cfg(rustc_is_nightly)]
impl<A> DefaultReturnValue<A> for ()
where
    A: for<'args> ArgumentsMatcher<'args>,
{
    fn default_return_value() -> Option<Rc<dyn ReturnValueGenerator<A, ()>>> {
        Some(Rc::new(Cloned(())))
    }
}