async fnrestituisce un tipo anonimo che implementa Future, quindi se vogliamo usarlo come callback, dobbiamo convertire il valore restituito in un oggetto tratto.
Ho provato a scrivere una funzione per fare questo, ma ho avuto alcuni problemi a vita.
async fnrestituirà la durata di tutti i parametri, quindi è necessario anche la firma del callback. Come posso aggiungere la durata al valore restituito del callback?
use futures::future::{Future, FutureExt, LocalBoxFuture};
type Context = ();
type AsyncCb = Box<dyn for<'r> FnOnce(&'r Context) -> LocalBoxFuture<'r, ()>>;
fn normalize_async_cb<Fut: Future<Output = ()>>(f: for<'r> fn(&'r Context) -> Fut) -> AsyncCb
// how to add 'r for Fut? ^^^
{
let cb = move |ctx: &Context| f(ctx).boxed_local();
Box::new(cb)
}
normalize_async_cbun puntatore a funzione?