refactor: handle potencial panic for 404/50x error page responses
Diff
src/error_page.rs | 37 +++++++++++++++++++++++--------------
1 file changed, 23 insertions(+), 14 deletions(-)
@@ -7,10 +7,11 @@ use crate::error::Result;
pub static PAGE_404: OnceCell<String> = OnceCell::new();
pub static PAGE_50X: OnceCell<String> = OnceCell::new();
pub fn get_error_response(method: &Method, status_code: &StatusCode) -> Result<Response<Body>> {
tracing::warn!(method = ?method, status = status_code.as_u16(), error = ?status_code.to_string());
tracing::warn!(method = ?method, status = status_code.as_u16(), error = ?status_code.to_owned());
let mut error_page_content = String::new();
let status_code = match status_code {
@@ -32,13 +33,17 @@ pub fn get_error_response(method: &Method, status_code: &StatusCode) -> Result<R
| &StatusCode::UNSUPPORTED_MEDIA_TYPE
| &StatusCode::RANGE_NOT_SATISFIABLE
| &StatusCode::EXPECTATION_FAILED => {
if status_code == &StatusCode::NOT_FOUND {
error_page_content = PAGE_404
.get()
.expect("PAGE_404 contant is not initialized")
.to_string();
error_page_content = match PAGE_404.get() {
Some(s) => s.to_owned(),
None => {
tracing::error!(
"404 error page content is not accessible or `PAGE_404` uninitialized"
);
String::new()
}
};
}
status_code
}
@@ -52,12 +57,16 @@ pub fn get_error_response(method: &Method, status_code: &StatusCode) -> Result<R
| &StatusCode::VARIANT_ALSO_NEGOTIATES
| &StatusCode::INSUFFICIENT_STORAGE
| &StatusCode::LOOP_DETECTED => {
error_page_content = PAGE_50X
.get()
.expect("PAGE_50X contant is not initialized")
.to_string();
error_page_content = match PAGE_50X.get() {
Some(s) => s.to_owned(),
None => {
tracing::error!(
"50x error page content is not accessible or `PAGE_50X` uninitialized"
);
String::new()
}
};
status_code
}