http1/
handler.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
use std::sync::Arc;

use crate::{body::Body, request::Request, response::Response};

/// Handles a server request.
pub trait RequestHandler {
    /// Gets a request and returns a response.
    fn handle(&self, req: Request<Body>) -> Response<Body>;
}

impl<F> RequestHandler for F
where
    F: Fn(Request<Body>) -> Response<Body>,
{
    fn handle(&self, req: Request<Body>) -> Response<Body> {
        (self)(req)
    }
}

impl<T: RequestHandler> RequestHandler for Arc<T> {
    fn handle(&self, req: Request<Body>) -> Response<Body> {
        self.as_ref().handle(req)
    }
}