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 {
59 pub const STYLE_FILEPATH: &'static str = "style.css";
60
61 pub fn is_matching_request(request: &Request) -> bool {
62 request.request_uri == "/style.css"
63 }
64
65 pub fn process_request(_request: &Request, mut response: Response) -> Response {
66 response.status_code = *STATUS_CODE_REASON_PHRASE.n200_ok.status_code;
67 response.reason_phrase = STATUS_CODE_REASON_PHRASE.n200_ok.reason_phrase.to_string();
68
69
70 if FileExt::does_file_exist(StyleController::STYLE_FILEPATH) {
71 let boxed_content_range =
72 Range::get_content_range_of_a_file(StyleController::STYLE_FILEPATH);
73
74 if boxed_content_range.is_ok() {
75 let content_range = boxed_content_range.unwrap();
76 let content_range_list = vec![content_range];
77 response.content_range_list = content_range_list;
78 } else {
79 let error = boxed_content_range.err().unwrap();
80 let mime_type = MimeType::TEXT_HTML.to_string();
81 let content_range = Range::get_content_range(
82 Vec::from(error.as_bytes()),
83 mime_type
84 );
85
86 let content_range_list = vec![content_range];
87 response.content_range_list = content_range_list;
88 response.status_code = *STATUS_CODE_REASON_PHRASE.n500_internal_server_error.status_code;
89 response.reason_phrase = STATUS_CODE_REASON_PHRASE.n500_internal_server_error.reason_phrase.to_string();
90 }
91 } else {
92 let style_file = include_bytes!("style.css");
93
94 let content_range =
95 Range::get_content_range(style_file.to_vec(), MimeType::TEXT_CSS.to_string());
96
97
98 let content_range_list = vec![content_range];
99 response.content_range_list = content_range_list;
100
101 }
102
103 response
104 }
105}