From fff207d3cb41c5a76db234196f16d28952dfd91c Mon Sep 17 00:00:00 2001 From: Fuwn Date: Thu, 6 Apr 2023 08:01:52 +0000 Subject: feat(response): async error handler --- src/handler/response/error.rs | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) (limited to 'src/handler/response/error.rs') diff --git a/src/handler/response/error.rs b/src/handler/response/error.rs index c433a46..a1a7885 100644 --- a/src/handler/response/error.rs +++ b/src/handler/response/error.rs @@ -16,10 +16,23 @@ // Copyright (C) 2022-2022 Fuwn // SPDX-License-Identifier: GPL-3.0-only +use async_trait::async_trait; + use crate::{context::ErrorContext, Response}; #[allow(clippy::module_name_repetitions)] -pub trait ErrorResponse: FnMut(ErrorContext) -> Response + Send + Sync {} +#[async_trait] +pub trait ErrorResponse: Send + Sync { + async fn call(&mut self, context: ErrorContext) -> Response; +} -impl ErrorResponse for T where T: FnMut(ErrorContext) -> Response + Send + Sync -{} +#[async_trait] +impl ErrorResponse for T +where + T: FnMut(ErrorContext) -> F + Send + Sync, + F: std::future::Future + Send + 'static, +{ + async fn call(&mut self, context: ErrorContext) -> Response { + (*self)(context).await + } +} -- cgit v1.2.3