- 
          
- 
                Notifications
    You must be signed in to change notification settings 
- Fork 90
Closed
Labels
Description
In Rocket, there's currently the following function:
impl<'r, R: Responder<'r> + Send + 'r, E: fmt::Debug + Send + 'r> Responder<'r> for Result<R, E> {
    default fn respond_to(self, req: &'r Request<'_>) -> response::ResultFuture<'r> {
        Box::pin(async move {
            match self {
                Ok(r) => r.respond_to(req).await,
                Err(e) => {
                    error_!("Response was a non-`Responder` `Err`: {:?}.", e);
                    Err(Status::InternalServerError)
                }
            }
        })
    }
}I'm looking into rewriting the traits using this crate, and would like to write the function as
#[async_trait]
impl<'r, R: Responder<'r> + Send + 'r, E: fmt::Debug + Send + 'r> Responder<'r> for Result<R, E> {
    default async fn respond_to(self, req: &'r Request<'_>) -> response::Result<'r> {
        match self {
            Ok(r) => r.respond_to(req).await,
            Err(e) => {
                error_!("Response was a non-`Responder` `Err`: {:?}.", e);
                Err(Status::InternalServerError)
            }
        }
    }
}When doing this, I get an error.
error: missing `fn`, `type`, or `const` for impl-item declaration
   --> core/lib/src/response/responder.rs:296:99
    |
296 |   impl<'r, R: Responder<'r> + Send + 'r, E: fmt::Debug + Send + 'r> Responder<'r> for Result<R, E> {
    |  ___________________________________________________________________________________________________^
297 | |     default async fn respond_to(self, req: &'r Request<'_>) -> response::Result<'r> {
    | |____^ missing `fn`, `type`, or `const`
I presume this is because of specialization, as it seems to work everywhere else.