rust_web_server/app/controller/script/
mod.rs1#[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}