use log::debug; use rocket::catch; use rocket::response::Redirect; use rocket_dyn_templates::Template; use serde::Serialize; // HELPERS AND ROUTES FOR 404 ERROR #[derive(Debug, Serialize)] pub struct ErrorContext { pub back: Option, pub flash_name: Option, pub flash_msg: Option, pub title: Option, } impl ErrorContext { pub fn build() -> ErrorContext { ErrorContext { back: None, flash_name: None, flash_msg: None, title: None, } } } #[catch(404)] pub fn not_found() -> Template { debug!("404 Page Not Found"); let mut context = ErrorContext::build(); context.back = Some("/".to_string()); context.title = Some("404: Page Not Found".to_string()); context.flash_name = Some("error".to_string()); context.flash_msg = Some("No resource found for given URL".to_string()); Template::render("catchers/not_found", context) } // HELPERS AND ROUTES FOR 500 ERROR #[catch(500)] pub fn internal_error() -> Template { debug!("500 Internal Server Error"); let mut context = ErrorContext::build(); context.back = Some("/".to_string()); context.title = Some("500: Internal Server Error".to_string()); context.flash_name = Some("error".to_string()); context.flash_msg = Some("Internal server error".to_string()); Template::render("catchers/internal_error", context) } // HELPERS AND ROUTES FOR 403 FORBIDDEN #[catch(403)] pub fn forbidden() -> Redirect { debug!("403 Forbidden"); Redirect::to("/login") }