rust_web_server/app/
mod.rs

1#[cfg(test)]
2mod tests;
3
4pub mod controller;
5
6use crate::app::controller::favicon::FaviconController;
7use crate::app::controller::file::initiate::FileUploadInitiateController;
8use crate::app::controller::form::get_method::FormGetMethodController;
9use crate::app::controller::form::multipart_enctype_post_method::FormMultipartEnctypePostMethodController;
10use crate::app::controller::form::url_encoded_enctype_post_method::FormUrlEncodedEnctypePostMethodController;
11use crate::app::controller::index::IndexController;
12use crate::app::controller::not_found::NotFoundController;
13use crate::app::controller::script::ScriptController;
14use crate::app::controller::static_resource::StaticResourceController;
15use crate::app::controller::style::StyleController;
16use crate::application::Application;
17use crate::controller::Controller;
18use crate::core::New;
19use crate::header::Header;
20
21use crate::request::{Request};
22use crate::response::{Response, STATUS_CODE_REASON_PHRASE};
23use crate::server::ConnectionInfo;
24
25#[derive(Copy, Clone)]
26pub struct App {}
27
28impl New for App {
29    fn new() -> Self {
30        App{}
31    }
32}
33
34impl Application for App {
35    fn execute(&self, request: &Request, connection: &ConnectionInfo) -> Result<Response, String> {
36        let header_list = Header::get_header_list(&request);
37
38        let mut response: Response = Response::get_response(
39            STATUS_CODE_REASON_PHRASE.n501_not_implemented,
40            Some(header_list),
41            None
42        );
43
44
45
46        if IndexController::is_matching(&request, connection) {
47            response = IndexController::process(&request, response, connection);
48            return Ok(response)
49        }
50
51        if StyleController::is_matching(&request, connection) {
52            response = StyleController::process(&request, response, connection);
53            return Ok(response)
54        }
55
56        if ScriptController::is_matching(&request, connection) {
57            response = ScriptController::process(&request, response, connection);
58            return Ok(response)
59        }
60
61        if FileUploadInitiateController::is_matching(&request, connection) {
62            response = FileUploadInitiateController::process(&request, response, connection);
63            return Ok(response)
64        }
65
66        if FormUrlEncodedEnctypePostMethodController::is_matching(&request, connection) {
67            response = FormUrlEncodedEnctypePostMethodController::process(&request, response, connection);
68            return Ok(response)
69        }
70
71        if FormGetMethodController::is_matching(&request, connection) {
72            response = FormGetMethodController::process(&request, response, connection);
73            return Ok(response)
74        }
75
76        if FormMultipartEnctypePostMethodController::is_matching(&request, connection) {
77            response = FormMultipartEnctypePostMethodController::process(&request, response, connection);
78            return Ok(response)
79        }
80
81        if FaviconController::is_matching(&request, connection) {
82            response = FaviconController::process(&request, response, connection);
83            return Ok(response)
84        }
85
86        if StaticResourceController::is_matching(&request, connection) {
87            response = StaticResourceController::process(&request, response, connection);
88            return Ok(response)
89        }
90
91        if NotFoundController::is_matching(&request, connection) {
92            response = NotFoundController::process(&request, response, connection);
93            return Ok(response)
94        }
95
96
97        Ok(response)
98    }
99}
100
101impl App {
102    pub fn handle_request(request: Request) -> (Response, Request) {
103        let header_list = Header::get_header_list(&request);
104
105        let mut response: Response = Response::get_response(
106            STATUS_CODE_REASON_PHRASE.n501_not_implemented,
107            Some(header_list),
108            None
109        );
110
111
112
113        if IndexController::is_matching_request(&request) {
114            response = IndexController::process_request(&request, response);
115            return (response, request)
116        }
117
118        if StyleController::is_matching_request(&request) {
119            response = StyleController::process_request(&request, response);
120            return (response, request)
121        }
122
123        if ScriptController::is_matching_request(&request) {
124            response = ScriptController::process_request(&request, response);
125            return (response, request)
126        }
127
128        if FileUploadInitiateController::is_matching_request(&request) {
129            response = FileUploadInitiateController::process_request(&request, response);
130            return (response, request)
131        }
132
133        if FormUrlEncodedEnctypePostMethodController::is_matching_request(&request) {
134            response = FormUrlEncodedEnctypePostMethodController::process_request(&request, response);
135            return (response, request)
136        }
137
138        if FormGetMethodController::is_matching_request(&request) {
139            response = FormGetMethodController::process_request(&request, response);
140            return (response, request)
141        }
142
143        if FormMultipartEnctypePostMethodController::is_matching_request(&request) {
144            response = FormMultipartEnctypePostMethodController::process_request(&request, response);
145            return (response, request)
146        }
147
148        if FaviconController::is_matching_request(&request) {
149            response = FaviconController::process_request(&request, response);
150            return (response, request)
151        }
152
153        if StaticResourceController::is_matching_request(&request) {
154            response = StaticResourceController::process_request(&request, response);
155            return (response, request)
156        }
157
158        if NotFoundController::is_matching_request(&request) {
159            response = NotFoundController::process_request(&request, response);
160            return (response, request)
161        }
162
163
164        (response, request)
165    }
166
167}