use std::sync::Arc;
use super::{request::Request, response::IntoResponse};
pub trait Handler: Send + Sync {
fn call(&self, request: Request) -> Box<dyn IntoResponse>;
}
impl<F, R> Handler for F
where
F: Fn(Request) -> R + Send + Sync,
R: IntoResponse + 'static,
{
fn call(&self, request: Request) -> Box<dyn IntoResponse> {
Box::new((self)(request))
}
}
pub fn trigger(
request: Request,
handler: Arc<Box<dyn Handler + Send + Sync>>,
) -> Box<dyn IntoResponse> {
handler.call(request)
}