Skip to main content

rust_web_server/app/controller/script/
mod.rs

1use file_ext::FileExt;
2use crate::controller::Controller;
3use crate::mime_type::MimeType;
4use crate::range::Range;
5use crate::request::{METHOD, Request};
6use crate::response::{Response, STATUS_CODE_REASON_PHRASE};
7use crate::server::ConnectionInfo;
8
9#[cfg(test)]
10mod tests;
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
61//backward compatability
62impl ScriptController {
63    pub const SCRIPT_FILEPATH: &'static str = "script.js";
64
65    pub fn is_matching_request(request: &Request) -> bool {
66        request.request_uri == "/script.js"
67    }
68
69    pub fn process_request(_request: &Request, mut response: Response) -> Response {
70        response.status_code = *STATUS_CODE_REASON_PHRASE.n200_ok.status_code;
71        response.reason_phrase = STATUS_CODE_REASON_PHRASE.n200_ok.reason_phrase.to_string();
72
73
74        if FileExt::does_file_exist(ScriptController::SCRIPT_FILEPATH) {
75            let boxed_content_range =
76                Range::get_content_range_of_a_file(ScriptController::SCRIPT_FILEPATH);
77
78            if boxed_content_range.is_ok() {
79                let content_range = boxed_content_range.unwrap();
80                let content_range_list = vec![content_range];
81                response.content_range_list = content_range_list;
82            } else {
83                let error = boxed_content_range.err().unwrap();
84                let mime_type = MimeType::TEXT_HTML.to_string();
85                let content_range = Range::get_content_range(
86                    Vec::from(error.as_bytes()),
87                    mime_type
88                );
89
90                let content_range_list = vec![content_range];
91                response.content_range_list = content_range_list;
92                response.status_code = *STATUS_CODE_REASON_PHRASE.n500_internal_server_error.status_code;
93                response.reason_phrase = STATUS_CODE_REASON_PHRASE.n500_internal_server_error.reason_phrase.to_string();
94            }
95        } else {
96            let script_file = include_bytes!("script.js");
97
98            let content_range =
99                Range::get_content_range(script_file.to_vec(), MimeType::TEXT_JAVASCRIPT.to_string());
100
101
102            let content_range_list = vec![content_range];
103            response.content_range_list = content_range_list;
104
105        }
106
107        response
108    }
109}