dhttp/services/
errorpage.rs1use crate::core::{HttpError, HttpErrorHandler};
2use crate::reqres::{res, HttpRequest, HttpResponse, StatusCode};
3
4fn error_page(code: u16, code_desc: &str, desc: &str, name: &str) -> String {
5format!(r#"<!doctype html>
6<html><title>{code} {code_desc}</title><meta name="viewport" content="width=device-width"><style>*{{font-family:sans-serif;color:#0e1219;border-color:#0e1219;background:#f9f9f9}}@media(prefers-color-scheme:dark){{*{{color:#47d8bb;border-color:#47d8bb;background:#0e1219}}}}h1{{margin:0;}}div{{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);padding:8px;border:4px solid}}</style><div>
7
8<h1> {code} {code_desc} </h1>
9 {desc}
10<hr><!--------------------------->
11<center> {name} </center>
12
13</div></html>
14"#)
15}
16
17pub struct ErrorPageHandler {
19 pub name: String,
20}
21
22impl HttpErrorHandler for ErrorPageHandler {
23 fn error(&self, req: &HttpRequest, error: &dyn HttpError) -> HttpResponse {
24 let code = error.status_code();
25 let desc = error.http_description();
26 res::html(req, error_page(code.0, code.as_str(), &desc, &self.name))
27 }
28
29 fn plain_code(&self, code: StatusCode) -> HttpResponse {
30 res::html(&HttpRequest::default(), error_page(code.0, code.as_str(), "", &self.name))
31 }
32}