rust_web_server/app/controller/script/
mod.rs1use 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
61impl 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}