Rust 如何通过trait委托具有非静态参数的异步函数?

Rust 如何通过trait委托具有非静态参数的异步函数?,rust,async-await,traits,Rust,Async Await,Traits,像这样的代码: use std::future::Future; use std::pin::Pin; trait A { fn handle<'a>(&'a self, data: &'a i32) -> Pin<Box<dyn 'a + Future<Output = ()>>>; } impl<'b, Fut> A for fn(&'b i32) -> Fut where F

像这样的代码:

use std::future::Future;
use std::pin::Pin;

trait A {
    fn handle<'a>(&'a self, data: &'a i32) -> Pin<Box<dyn 'a + Future<Output = ()>>>;
}

impl<'b, Fut> A for fn(&'b i32) -> Fut
where
    Fut: 'b + Future<Output = ()>,
{
    fn handle<'a>(&'a self, data: &'a i32) -> Pin<Box<dyn 'a + Future<Output = ()>>> {
        Box::pin(self(data))
    }
}
使用std::future::future;
使用std::pin::pin;
特征A{
fn手柄>;
}
impl Fut
哪里
未来:“b+未来,
{
fn手柄>{
框::pin(自身(数据))
}
}

如何为所有
异步fn(&i32)
实现
A

此代码应能工作:

use std::future::Future;
use std::pin::Pin;

trait A<'a> {
    fn handle(&'a self, data: &'a i32) -> Pin<Box<dyn 'a + Future<Output=()>>>;
}

impl <'a, F, Fut> A<'a> for F
where F: 'static + Fn(&'a i32) -> Fut,
      Fut: 'a + Future<Output=()>
{
    fn handle(&'a self, data: &'a i32) -> Pin<Box<dyn 'a + Future<Output=()>>> {
        Box::pin(self(data))
    }
}
使用std::future::future;
使用std::pin::pin;
性状A>;
}
对F的impl
式中F:'静态+Fn(&'a i32)->Fut,
未来:a+未来
{
fn手柄(&'a自身,数据:&'a i32)->插脚a
async fn processor(data: &i32) {
}

fn consume(a: impl for<'a> A<'a>) {
}

fn main() {
    consume(processor);
}