rust_web_server/app/controller/style/
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
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}