toni 0.1.0

Fast and modular web framework for scalable applications
Documentation
use std::sync::Arc;

use anyhow::Result;

use crate::traits_helpers::ControllerTrait;
use crate::http_helpers::{HttpRequest, HttpResponse, IntoResponse};

pub trait RouteAdapter {
    type Request;
    type Response;
    
    fn adapt_request(request: Self::Request)  -> impl Future<Output = Result<HttpRequest>>;
    
    fn adapt_response(response: Box<dyn IntoResponse<Response = HttpResponse>>) -> Result<Self::Response>;
    
    fn handle_request(
        request: Self::Request,
        controller: Arc<Box<dyn ControllerTrait>>,
    ) -> impl Future<Output = Result<Self::Response>> {
        async move {
            let http_request = Self::adapt_request(request).await?;
            let http_response = controller.execute(http_request);
            Self::adapt_response(http_response)
        }
    }}