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