use super::{request::Request, response::Response};
type ControllerBoxType = Box<dyn Fn(Request) -> Response + Sync + Send + 'static>;
pub trait ControllerT {
fn controller(&self, _: Request) -> Response;
}
pub struct Controller {
call_back: ControllerBoxType,
}
impl Controller {
pub fn new<F>(cb: F) -> Controller
where
F: Fn(Request) -> Response + Sync + Send + 'static,
{
let action = Box::new(cb);
Controller { call_back: action }
}
}
impl Controller {
pub fn get_action(&self) -> &ControllerBoxType {
&self.call_back
}
pub fn use_action(&self, request: Request) -> Response {
let cb = &self.get_action();
cb(request)
}
}