rocket regression: rigid alias don't require trait to hold · Issue #177 · rust-lang/trait-system-refactor-initiative (original) (raw)

use std::{future::Future, pin::Pin};

pub trait FromRequest<'r> {
    type Assoc;
    fn from_request() -> Pin<Box<dyn Future<Output = Self::Assoc> + Send>>;
}

fn from_request<'r, T: FromRequest<'r>>() -> Pin<Box<dyn Future<Output = ()> + Send>> {
    Box::pin(async move {
        T::from_request().await;
    })
}