#[macro_export]
macro_rules! mock_func {
($mock_obj:ident, $mock_fn:ident, $retval:ty, ) => (
let $mock_obj = double::Mock::<(), $retval>::default();
let $mock_fn = || -> $retval { $mock_obj.call() };
);
($mock_obj:ident, $mock_fn:ident, $retval:ty, $arg1_type:ty) => (
let $mock_obj = double::Mock::<($arg1_type), $retval>::default();
let $mock_fn = |arg1: $arg1_type| -> $retval { $mock_obj.call(arg1.clone()) };
);
($mock_obj:ident, $mock_fn:ident, $retval:ty, $arg1_type:ty, $arg2_type:ty) => (
let $mock_obj = double::Mock::<($arg1_type, $arg2_type), $retval>::default();
let $mock_fn = |arg1: $arg1_type, arg2: $arg2_type| -> $retval { $mock_obj.call(arg1.clone(), arg2.clone()) };
);
($mock_obj:ident, $mock_fn:ident, $retval:ty, $arg1_type:ty, $arg2_type:ty, $arg3_type:ty) => (
let $mock_obj = double::Mock::<($arg1_type, $arg2_type, $arg3_type), $retval>::default();
let $mock_fn = |arg1: $arg1_type, arg2: $arg2_type, arg3: $arg3_type| -> $retval { $mock_obj.call(arg1.clone(), arg2.clone(), arg3.clone()) };
);
($mock_obj:ident, $mock_fn:ident, $retval:ty, $arg1_type:ty, $arg2_type:ty, $arg3_type:ty, $arg4_type:ty) => (
let $mock_obj = double::Mock::<($arg1_type, $arg2_type, $arg3_type, $arg4_type), $retval>::default();
let $mock_fn = |arg1: $arg1_type, arg2: $arg2_type, arg3: $arg3_type, arg4: $arg4_type| -> $retval { $mock_obj.call(arg1.clone(), arg2.clone(), arg3.clone(), arg4.clone()) };
);
($mock_obj:ident, $mock_fn:ident, $retval:ty, $arg1_type:ty, $arg2_type:ty, $arg3_type:ty, $arg4_type:ty, $arg5_type:ty) => (
let $mock_obj = double::Mock::<($arg1_type, $arg2_type, $arg3_type, $arg4_type, $arg5_type), $retval>::default();
let $mock_fn = |arg1: $arg1_type, arg2: $arg2_type, arg3: $arg3_type, arg4: $arg4_type, arg5: $arg5_type| -> $retval { $mock_obj.call(arg1.clone(), arg2.clone(), arg3.clone(), arg4.clone(), arg5.clone()) };
);
($mock_obj:ident, $mock_fn:ident, $retval:ty, $arg1_type:ty, $arg2_type:ty, $arg3_type:ty, $arg4_type:ty, $arg5_type:ty, $arg6_type:ty) => (
let $mock_obj = double::Mock::<($arg1_type, $arg2_type, $arg3_type, $arg4_type, $arg5_type, $arg6_type), $retval>::default();
let $mock_fn = |arg1: $arg1_type, arg2: $arg2_type, arg3: $arg3_type, arg4: $arg4_type, arg5: $arg5_type, arg6: $arg6_type| -> $retval { $mock_obj.call(arg1.clone(), arg2.clone(), arg3.clone(), arg4.clone(), arg5.clone(), arg6.clone()) };
);
($mock_obj:ident, $mock_fn:ident, $retval:ty, $arg1_type:ty, $arg2_type:ty, $arg3_type:ty, $arg4_type:ty, $arg5_type:ty, $arg6_type:ty, $arg7_type:ty) => (
let $mock_obj = double::Mock::<($arg1_type, $arg2_type, $arg3_type, $arg4_type, $arg5_type, $arg6_type, $arg7_type), $retval>::default();
let $mock_fn = |arg1: $arg1_type, arg2: $arg2_type, arg3: $arg3_type, arg4: $arg4_type, arg5: $arg5_type, arg6: $arg6_type, arg7: $arg7_type| -> $retval { $mock_obj.call(arg1.clone(), arg2.clone(), arg3.clone(), arg4.clone(), arg5.clone(), arg6.clone(), arg7.clone()) };
);
($mock_obj:ident, $mock_fn:ident, $retval:ty, $arg1_type:ty, $arg2_type:ty, $arg3_type:ty, $arg4_type:ty, $arg5_type:ty, $arg6_type:ty, $arg7_type:ty, $arg8_type:ty) => (
let $mock_obj = double::Mock::<($arg1_type, $arg2_type, $arg3_type, $arg4_type, $arg5_type, $arg6_type, $arg7_type, $arg8_type), $retval>::default();
let $mock_fn = |arg1: $arg1_type, arg2: $arg2_type, arg3: $arg3_type, arg4: $arg4_type, arg5: $arg5_type, arg6: $arg6_type, arg7: $arg7_type, arg8: $arg8_type| -> $retval { $mock_obj.call(arg1.clone(), arg2.clone(), arg3.clone(), arg4.clone(), arg5.clone(), arg6.clone(), arg7.clone(), arg8.clone()) };
);
($mock_obj:ident, $mock_fn:ident, $retval:ty, $arg1_type:ty, $arg2_type:ty, $arg3_type:ty, $arg4_type:ty, $arg5_type:ty, $arg6_type:ty, $arg7_type:ty, $arg8_type:ty, $arg9_type:ty) => (
let $mock_obj = double::Mock::<($arg1_type, $arg2_type, $arg3_type, $arg4_type, $arg5_type, $arg6_type, $arg7_type, $arg8_type, $arg9_type), $retval>::default();
let $mock_fn = |arg1: $arg1_type, arg2: $arg2_type, arg3: $arg3_type, arg4: $arg4_type, arg5: $arg5_type, arg6: $arg6_type, arg7: $arg7_type, arg8: $arg8_type, arg9: $arg9_type| -> $retval { $mock_obj.call(arg1.clone(), arg2.clone(), arg3.clone(), arg4.clone(), arg5.clone(), arg6.clone(), arg7.clone(), arg8.clone(), arg9.clone()) };
);
($mock_obj:ident, $mock_fn:ident, $retval:ty, $arg1_type:ty, $arg2_type:ty, $arg3_type:ty, $arg4_type:ty, $arg5_type:ty, $arg6_type:ty, $arg7_type:ty, $arg8_type:ty, $arg9_type:ty, $arg10_type:ty) => (
let $mock_obj = double::Mock::<($arg1_type, $arg2_type, $arg3_type, $arg4_type, $arg5_type, $arg6_type, $arg7_type, $arg8_type, $arg9_type, $arg10_type), $retval>::default();
let $mock_fn = |arg1: $arg1_type, arg2: $arg2_type, arg3: $arg3_type, arg4: $arg4_type, arg5: $arg5_type, arg6: $arg6_type, arg7: $arg7_type, arg8: $arg8_type, arg9: $arg9_type, arg10: $arg10_type| -> $retval { $mock_obj.call(arg1.clone(), arg2.clone(), arg3.clone(), arg4.clone(), arg5.clone(), arg6.clone(), arg7.clone(), arg8.clone(), arg9.clone(), arg10.clone()) };
);
($mock_obj:ident, $mock_fn:ident, $retval:ty, $arg1_type:ty, $arg2_type:ty, $arg3_type:ty, $arg4_type:ty, $arg5_type:ty, $arg6_type:ty, $arg7_type:ty, $arg8_type:ty, $arg9_type:ty, $arg10_type:ty, $arg11_type:ty) => (
let $mock_obj = double::Mock::<($arg1_type, $arg2_type, $arg3_type, $arg4_type, $arg5_type, $arg6_type, $arg7_type, $arg8_type, $arg9_type, $arg10_type, $arg11_type), $retval>::default();
let $mock_fn = |arg1: $arg1_type, arg2: $arg2_type, arg3: $arg3_type, arg4: $arg4_type, arg5: $arg5_type, arg6: $arg6_type, arg7: $arg7_type, arg8: $arg8_type, arg9: $arg9_type, arg10: $arg10_type, arg11: $arg11_type| -> $retval { $mock_obj.call(arg1.clone(), arg2.clone(), arg3.clone(), arg4.clone(), arg5.clone(), arg6.clone(), arg7.clone(), arg8.clone(), arg9.clone(), arg10.clone(), arg11.clone()) };
);
}
#[macro_export]
macro_rules! mock_func_no_default {
($mock_obj:ident, $mock_fn:ident, $retval:ty, $retval_default:expr, ) => (
let $mock_obj = double::Mock::<(), $retval>::new($retval_default);
let $mock_fn = || -> $retval { $mock_obj.call() };
);
($mock_obj:ident, $mock_fn:ident, $retval:ty, $retval_default:expr, $arg1_type:ty) => (
let $mock_obj = double::Mock::<($arg1_type), $retval>::new($retval_default);
let $mock_fn = |arg1: $arg1_type| -> $retval { $mock_obj.call(arg1.clone()) };
);
($mock_obj:ident, $mock_fn:ident, $retval:ty, $retval_default:expr, $arg1_type:ty, $arg2_type:ty) => (
let $mock_obj = double::Mock::<($arg1_type, $arg2_type), $retval>::new($retval_default);
let $mock_fn = |arg1: $arg1_type, arg2: $arg2_type| -> $retval { $mock_obj.call(arg1.clone(), arg2.clone()) };
);
($mock_obj:ident, $mock_fn:ident, $retval:ty, $retval_default:expr, $arg1_type:ty, $arg2_type:ty, $arg3_type:ty) => (
let $mock_obj = double::Mock::<($arg1_type, $arg2_type, $arg3_type), $retval>::new($retval_default);
let $mock_fn = |arg1: $arg1_type, arg2: $arg2_type, arg3: $arg3_type| -> $retval { $mock_obj.call(arg1.clone(), arg2.clone(), arg3.clone()) };
);
($mock_obj:ident, $mock_fn:ident, $retval:ty, $retval_default:expr, $arg1_type:ty, $arg2_type:ty, $arg3_type:ty, $arg4_type:ty) => (
let $mock_obj = double::Mock::<($arg1_type, $arg2_type, $arg3_type, $arg4_type), $retval>::new($retval_default);
let $mock_fn = |arg1: $arg1_type, arg2: $arg2_type, arg3: $arg3_type, arg4: $arg4_type| -> $retval { $mock_obj.call(arg1.clone(), arg2.clone(), arg3.clone(), arg4.clone()) };
);
($mock_obj:ident, $mock_fn:ident, $retval:ty, $retval_default:expr, $arg1_type:ty, $arg2_type:ty, $arg3_type:ty, $arg4_type:ty, $arg5_type:ty) => (
let $mock_obj = double::Mock::<($arg1_type, $arg2_type, $arg3_type, $arg4_type, $arg5_type), $retval>::new($retval_default);
let $mock_fn = |arg1: $arg1_type, arg2: $arg2_type, arg3: $arg3_type, arg4: $arg4_type, arg5: $arg5_type| -> $retval { $mock_obj.call(arg1.clone(), arg2.clone(), arg3.clone(), arg4.clone(), arg5.clone()) };
);
($mock_obj:ident, $mock_fn:ident, $retval:ty, $retval_default:expr, $arg1_type:ty, $arg2_type:ty, $arg3_type:ty, $arg4_type:ty, $arg5_type:ty, $arg6_type:ty) => (
let $mock_obj = double::Mock::<($arg1_type, $arg2_type, $arg3_type, $arg4_type, $arg5_type, $arg6_type), $retval>::new($retval_default);
let $mock_fn = |arg1: $arg1_type, arg2: $arg2_type, arg3: $arg3_type, arg4: $arg4_type, arg5: $arg5_type, arg6: $arg6_type| -> $retval { $mock_obj.call(arg1.clone(), arg2.clone(), arg3.clone(), arg4.clone(), arg5.clone(), arg6.clone()) };
);
($mock_obj:ident, $mock_fn:ident, $retval:ty, $retval_default:expr, $arg1_type:ty, $arg2_type:ty, $arg3_type:ty, $arg4_type:ty, $arg5_type:ty, $arg6_type:ty, $arg7_type:ty) => (
let $mock_obj = double::Mock::<($arg1_type, $arg2_type, $arg3_type, $arg4_type, $arg5_type, $arg6_type, $arg7_type), $retval>::new($retval_default);
let $mock_fn = |arg1: $arg1_type, arg2: $arg2_type, arg3: $arg3_type, arg4: $arg4_type, arg5: $arg5_type, arg6: $arg6_type, arg7: $arg7_type| -> $retval { $mock_obj.call(arg1.clone(), arg2.clone(), arg3.clone(), arg4.clone(), arg5.clone(), arg6.clone(), arg7.clone()) };
);
($mock_obj:ident, $mock_fn:ident, $retval:ty, $retval_default:expr, $arg1_type:ty, $arg2_type:ty, $arg3_type:ty, $arg4_type:ty, $arg5_type:ty, $arg6_type:ty, $arg7_type:ty, $arg8_type:ty) => (
let $mock_obj = double::Mock::<($arg1_type, $arg2_type, $arg3_type, $arg4_type, $arg5_type, $arg6_type, $arg7_type, $arg8_type), $retval>::new($retval_default);
let $mock_fn = |arg1: $arg1_type, arg2: $arg2_type, arg3: $arg3_type, arg4: $arg4_type, arg5: $arg5_type, arg6: $arg6_type, arg7: $arg7_type, arg8: $arg8_type| -> $retval { $mock_obj.call(arg1.clone(), arg2.clone(), arg3.clone(), arg4.clone(), arg5.clone(), arg6.clone(), arg7.clone(), arg8.clone()) };
);
($mock_obj:ident, $mock_fn:ident, $retval:ty, $retval_default:expr, $arg1_type:ty, $arg2_type:ty, $arg3_type:ty, $arg4_type:ty, $arg5_type:ty, $arg6_type:ty, $arg7_type:ty, $arg8_type:ty, $arg9_type:ty) => (
let $mock_obj = double::Mock::<($arg1_type, $arg2_type, $arg3_type, $arg4_type, $arg5_type, $arg6_type, $arg7_type, $arg8_type, $arg9_type), $retval>::new($retval_default);
let $mock_fn = |arg1: $arg1_type, arg2: $arg2_type, arg3: $arg3_type, arg4: $arg4_type, arg5: $arg5_type, arg6: $arg6_type, arg7: $arg7_type, arg8: $arg8_type, arg9: $arg9_type| -> $retval { $mock_obj.call(arg1.clone(), arg2.clone(), arg3.clone(), arg4.clone(), arg5.clone(), arg6.clone(), arg7.clone(), arg8.clone(), arg9.clone()) };
);
($mock_obj:ident, $mock_fn:ident, $retval:ty, $retval_default:expr, $arg1_type:ty, $arg2_type:ty, $arg3_type:ty, $arg4_type:ty, $arg5_type:ty, $arg6_type:ty, $arg7_type:ty, $arg8_type:ty, $arg9_type:ty, $arg10_type:ty) => (
let $mock_obj = double::Mock::<($arg1_type, $arg2_type, $arg3_type, $arg4_type, $arg5_type, $arg6_type, $arg7_type, $arg8_type, $arg9_type, $arg10_type), $retval>::new($retval_default);
let $mock_fn = |arg1: $arg1_type, arg2: $arg2_type, arg3: $arg3_type, arg4: $arg4_type, arg5: $arg5_type, arg6: $arg6_type, arg7: $arg7_type, arg8: $arg8_type, arg9: $arg9_type, arg10: $arg10_type| -> $retval { $mock_obj.call(arg1.clone(), arg2.clone(), arg3.clone(), arg4.clone(), arg5.clone(), arg6.clone(), arg7.clone(), arg8.clone(), arg9.clone(), arg10.clone()) };
);
($mock_obj:ident, $mock_fn:ident, $retval:ty, $retval_default:expr, $arg1_type:ty, $arg2_type:ty, $arg3_type:ty, $arg4_type:ty, $arg5_type:ty, $arg6_type:ty, $arg7_type:ty, $arg8_type:ty, $arg9_type:ty, $arg10_type:ty, $arg11_type:ty) => (
let $mock_obj = double::Mock::<($arg1_type, $arg2_type, $arg3_type, $arg4_type, $arg5_type, $arg6_type, $arg7_type, $arg8_type, $arg9_type, $arg10_type, $arg11_type), $retval>::new($retval_default);
let $mock_fn = |arg1: $arg1_type, arg2: $arg2_type, arg3: $arg3_type, arg4: $arg4_type, arg5: $arg5_type, arg6: $arg6_type, arg7: $arg7_type, arg8: $arg8_type, arg9: $arg9_type, arg10: $arg10_type, arg11: $arg11_type| -> $retval { $mock_obj.call(arg1.clone(), arg2.clone(), arg3.clone(), arg4.clone(), arg5.clone(), arg6.clone(), arg7.clone(), arg8.clone(), arg9.clone(), arg10.clone(), arg11.clone()) };
);
}