use crate::http::{Request, Response};
use crate::stream::Stream;
use std::sync::Arc;
pub trait WebsocketHandler<State>: Send + Sync {
#[allow(missing_docs)]
fn serve(&self, request: Request, stream: Stream, state: Arc<State>);
}
impl<F, State> WebsocketHandler<State> for F
where
F: Fn(Request, Stream, Arc<State>) + Send + Sync,
{
fn serve(&self, request: Request, stream: Stream, state: Arc<State>) {
self(request, stream, state)
}
}
pub trait RequestHandler<State>: Send + Sync {
#[allow(missing_docs)]
fn serve(&self, request: Request, state: Arc<State>) -> Response;
}
impl<F, State> RequestHandler<State> for F
where
F: Fn(Request, Arc<State>) -> Response + Send + Sync,
{
fn serve(&self, request: Request, state: Arc<State>) -> Response {
self(request, state)
}
}
pub trait StatelessRequestHandler<State>: Send + Sync {
#[allow(missing_docs)]
fn serve(&self, request: Request) -> Response;
}
impl<F, State> StatelessRequestHandler<State> for F
where
F: Fn(Request) -> Response + Send + Sync,
{
fn serve(&self, request: Request) -> Response {
self(request)
}
}
pub trait PathAwareRequestHandler<State>: Send + Sync {
#[allow(missing_docs)]
fn serve(&self, request: Request, state: Arc<State>, route: &'static str) -> Response;
}
impl<F, State> PathAwareRequestHandler<State> for F
where
F: Fn(Request, Arc<State>, &'static str) -> Response + Send + Sync,
{
fn serve(&self, request: Request, state: Arc<State>, route: &'static str) -> Response {
self(request, state, route)
}
}