use std::path::PathBuf;
use ridicule::mock;
trait Foo
{
fn do_something<Callback>(&self, cb: Callback)
where
Callback: Fn(u64) -> String;
fn do_something_else<Callback, Value>(&self, cb: Callback)
where
Callback: Fn(f32) -> Value;
}
mock! {
MockFoo {}
impl Foo for MockFoo
{
fn do_something<Callback>(&self, cb: Callback)
where
Callback: Fn(u64) -> String;
fn do_something_else<Callback, Value>(&self, cb: Callback)
where
Callback: Fn(f32) -> Value;
}
}
fn main()
{
let mut mock_foo = MockFoo::new();
unsafe {
mock_foo
.expect_do_something()
.returning(|_me, cb: fn(_) -> _| {
println!("do_something was called");
let cb_res = cb(42);
println!("Received '{cb_res}' from callback");
});
}
unsafe {
mock_foo
.expect_do_something_else()
.returning(|_me, cb: fn(_) -> PathBuf| {
println!("do_something_else was called");
let cb_res = cb(255.255);
println!("Received '{}' from callback", cb_res.display());
});
}
mock_foo.do_something((|num| format!("Hello there {num}")) as fn(_) -> _);
mock_foo.do_something_else((|_| PathBuf::from(r"a/b/c.txt")) as fn(_) -> _);
}