rust_web_server/app/controller/script/
mod.rs

1#[cfg(test)]
2mod tests;
3
4use file_ext::FileExt;
5use crate::controller::Controller;
6use crate::mime_type::MimeType;
7use crate::range::Range;
8use crate::request::{METHOD, Request};
9use crate::response::{Response, STATUS_CODE_REASON_PHRASE};
10use crate::server::ConnectionInfo;
11
12pub struct ScriptController;
13
14impl Controller for ScriptController {
15    fn is_matching(request: &Request, _connection: &ConnectionInfo) -> bool {
16        request.method == METHOD.get && request.request_uri == "/script.js"
17    }
18
19    fn process(_request: &Request, mut response: Response, _connection: &ConnectionInfo) -> Response {
20        response.status_code = *STATUS_CODE_REASON_PHRASE.n200_ok.status_code;
21        response.reason_phrase = STATUS_CODE_REASON_PHRASE.n200_ok.reason_phrase.to_string();
22
23
24        if FileExt::does_file_exist(ScriptController::SCRIPT_FILEPATH) {
25            let boxed_content_range =
26                Range::get_content_range_of_a_file(ScriptController::SCRIPT_FILEPATH);
27
28            if boxed_content_range.is_ok() {
29                let content_range = boxed_content_range.unwrap();
30                let content_range_list = vec![content_range];
31                response.content_range_list = content_range_list;
32            } else {
33                let error = boxed_content_range.err().unwrap();
34                let mime_type = MimeType::TEXT_HTML.to_string();
35                let content_range = Range::get_content_range(
36                    Vec::from(error.as_bytes()),
37                    mime_type
38                );
39
40                let content_range_list = vec![content_range];
41                response.content_range_list = content_range_list;
42                response.status_code = *STATUS_CODE_REASON_PHRASE.n500_internal_server_error.status_code;
43                response.reason_phrase = STATUS_CODE_REASON_PHRASE.n500_internal_server_error.reason_phrase.to_string();
44            }
45        } else {
46            let script_file = include_bytes!("script.js");
47
48            let content_range =
49                Range::get_content_range(script_file.to_vec(), MimeType::TEXT_JAVASCRIPT.to_string());
50
51
52            let content_range_list = vec![content_range];
53            response.content_range_list = content_range_list;
54
55        }
56
57        response
58    }
59}
60
61impl ScriptController {
62    pub const SCRIPT_FILEPATH: &'static str = "script.js";
63
64    pub fn is_matching_request(request: &Request) -> bool {
65        request.request_uri == "/script.js"
66    }
67
68    pub fn process_request(_request: &Request, mut response: Response) -> Response {
69        response.status_code = *STATUS_CODE_REASON_PHRASE.n200_ok.status_code;
70        response.reason_phrase = STATUS_CODE_REASON_PHRASE.n200_ok.reason_phrase.to_string();
71
72
73        if FileExt::does_file_exist(ScriptController::SCRIPT_FILEPATH) {
74            let boxed_content_range =
75                Range::get_content_range_of_a_file(ScriptController::SCRIPT_FILEPATH);
76
77            if boxed_content_range.is_ok() {
78                let content_range = boxed_content_range.unwrap();
79                let content_range_list = vec![content_range];
80                response.content_range_list = content_range_list;
81            } else {
82                let error = boxed_content_range.err().unwrap();
83                let mime_type = MimeType::TEXT_HTML.to_string();
84                let content_range = Range::get_content_range(
85                    Vec::from(error.as_bytes()),
86                    mime_type
87                );
88
89                let content_range_list = vec![content_range];
90                response.content_range_list = content_range_list;
91                response.status_code = *STATUS_CODE_REASON_PHRASE.n500_internal_server_error.status_code;
92                response.reason_phrase = STATUS_CODE_REASON_PHRASE.n500_internal_server_error.reason_phrase.to_string();
93            }
94        } else {
95            let script_file = include_bytes!("script.js");
96
97            let content_range =
98                Range::get_content_range(script_file.to_vec(), MimeType::TEXT_JAVASCRIPT.to_string());
99
100
101            let content_range_list = vec![content_range];
102            response.content_range_list = content_range_list;
103
104        }
105
106        response
107    }
108}