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}