1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
use actix_web::{Result, HttpResponse}; use actix_web::dev::ServiceResponse; use actix_web::body::Body; use actix_web::http::{header, StatusCode}; use actix_web::middleware::errhandlers::ErrorHandlerResponse; use dbui_templates::templates; pub fn render_400(res: ServiceResponse<Body>) -> Result<ErrorHandlerResponse<Body>> { error_response(res, StatusCode::NOT_FOUND, "Bad request") } pub fn render_404(res: ServiceResponse<Body>) -> Result<ErrorHandlerResponse<Body>> { error_response(res, StatusCode::NOT_FOUND, "The resource you requested can't be found") } pub fn render_500(res: ServiceResponse<Body>) -> Result<ErrorHandlerResponse<Body>> { error_response(res, StatusCode::INTERNAL_SERVER_ERROR, "Something went wrong; this is probably not your fault") } fn error_response(mut res: ServiceResponse<Body>, status_code: StatusCode, message: &str) -> Result<ErrorHandlerResponse<Body>> { res.headers_mut().insert( header::CONTENT_TYPE, header::HeaderValue::from_str(mime::TEXT_HTML_UTF_8.as_ref()).unwrap() ); let rsp = HttpResponse::build(status_code) .content_type("text/html") .body(templates::error::error(status_code.as_u16(), status_code.canonical_reason().unwrap_or("Unknown Error"), message) .into_string()); Ok(ErrorHandlerResponse::Response( res.into_response(rsp) )) }