lact/http/
server.rs

1use crate::{
2    helpers::{Emitter, Middleware},
3    listener::tcp_listener::TcpListener,
4    routing::{route_manager::RouteManager, router::Router},
5};
6
7#[derive(Clone)]
8pub struct Server {
9    pub router_manager: RouteManager,
10    pub emitter: Emitter,
11    pub middleware: Vec<Middleware>
12}
13
14impl Server {
15    pub fn new() -> Self {
16        Default::default()
17    }
18
19    pub fn middleware(&mut self, middleware: Middleware){
20      self.middleware.push(middleware);
21    }
22
23    pub fn router(&mut self) -> Router{
24        Router::new(self)
25    }
26    pub fn router_with_base_path(&mut self, base_path: &str) -> Router {
27        Router::new_with_base_path(self, base_path)
28    }
29
30    pub async fn listen(self, port: &str) {
31        let mut listener = TcpListener::new(port);
32        listener.bind(self).await;
33
34        listener.accept().await;
35    }
36
37    pub fn on(&mut self, name: &str, handler: fn(value: String)) {
38        self.emitter.on(name, handler);
39    }
40}
41
42impl Default for Server {
43    fn default() -> Self {
44        Server {
45            router_manager: RouteManager::new(),
46            emitter: Emitter::new(),
47            middleware: Vec::new(),
48        }
49    }
50}