Support closures as delegates
Rust/WinRT doesn't yet automatically bind a lambda/closure to a delegate parameter. Today you need to create the delegate yourself. It looks something like this:
list.current_item_changed(TypedEventHandler::new(|_sender, _args| {
// do stuff here
Ok(())
}))?;
In the future you should be able to write simply:
list.current_item_changed(|_sender, _args| {
// do stuff here
Ok(())
})?;
The difficulty is in somehow specializing the winrt::Param generic for delegates to automatically create a WinRT delegate as needed while still supporting delegate objects for pass-through.
Alternatively, we could just use FnMut as the generic param for delegates. That would probably provide the best experience in most cases, but would suffer from "over-wrapping" delegate objects that are merely being passed through.
This might not be possible to do since conceptually we need to ensure methods which take delegates are generic over some type which is either a delegate which takes some type that implements FnMut or another type which also implements the same FnMut trait. I believe this would require higher-kinded types since the generic delegate type is itself generic over some type.
Challenge accepted. 🤜
Given that passing a closure is by far the most common scenario, we could make that the default and provide a XxxWithDelegate "overload" for when you absolutely must pass an existing delegate object.