aboutsummaryrefslogtreecommitdiff
path: root/src/handler/response/error.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/handler/response/error.rs')
-rw-r--r--src/handler/response/error.rs19
1 files changed, 16 insertions, 3 deletions
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 <[email protected]>
// 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<T> ErrorResponse for T where T: FnMut(ErrorContext) -> Response + Send + Sync
-{}
+#[async_trait]
+impl<T, F> ErrorResponse for T
+where
+ T: FnMut(ErrorContext) -> F + Send + Sync,
+ F: std::future::Future<Output = Response> + Send + 'static,
+{
+ async fn call(&mut self, context: ErrorContext) -> Response {
+ (*self)(context).await
+ }
+}