aboutsummaryrefslogtreecommitdiff
path: root/server/src/routes/ui/error.rs
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2023-01-18 16:16:03 +0100
committermetamuffin <metamuffin@disroot.org>2023-01-18 16:16:03 +0100
commit46ef75431e1d34c63a690726a8ef584d175ddd30 (patch)
treedf36a2bfb9fe3e19ce9f76665b4770063a089423 /server/src/routes/ui/error.rs
parent5aa557e864bd2cf940e7164b7568e7e545817306 (diff)
downloadjellything-46ef75431e1d34c63a690726a8ef584d175ddd30.tar
jellything-46ef75431e1d34c63a690726a8ef584d175ddd30.tar.bz2
jellything-46ef75431e1d34c63a690726a8ef584d175ddd30.tar.zst
restructure pages slightly
Diffstat (limited to 'server/src/routes/ui/error.rs')
-rw-r--r--server/src/routes/ui/error.rs59
1 files changed, 59 insertions, 0 deletions
diff --git a/server/src/routes/ui/error.rs b/server/src/routes/ui/error.rs
new file mode 100644
index 0000000..2a1f8e6
--- /dev/null
+++ b/server/src/routes/ui/error.rs
@@ -0,0 +1,59 @@
+use super::{layout::Layout, HtmlTemplate};
+use markup::Render;
+use rocket::http::Status;
+use rocket::{
+ catch,
+ http::ContentType,
+ response::{self, Responder},
+ Request, Response,
+};
+use std::{fmt::Display, io::Cursor};
+
+#[catch(default)]
+pub fn r_not_found<'a>(status: Status, _request: &Request) -> HtmlTemplate<markup::DynRender<'a>> {
+ HtmlTemplate(
+ "Not found".to_string(),
+ markup::new! {
+ h2 { "Error" }
+ p { @format!("{status:?}") }
+ },
+ )
+}
+
+#[derive(Debug)]
+pub struct MyError(anyhow::Error);
+
+impl<'r> Responder<'r, 'static> for MyError {
+ fn respond_to(self, _: &'r Request<'_>) -> response::Result<'static> {
+ let mut out = String::new();
+ Layout {
+ title: "Error".to_string(),
+ main: markup::new! {
+ h2 { "An error occured. Nobody is sorry"}
+ pre.error { @format!("{:?}", self.0) }
+ },
+ }
+ .render(&mut out)
+ .unwrap();
+ Response::build()
+ .header(ContentType::HTML)
+ .streamed_body(Cursor::new(out))
+ .ok()
+ }
+}
+
+impl Display for MyError {
+ fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
+ self.0.fmt(f)
+ }
+}
+impl From<anyhow::Error> for MyError {
+ fn from(err: anyhow::Error) -> MyError {
+ MyError(err)
+ }
+}
+impl From<std::fmt::Error> for MyError {
+ fn from(err: std::fmt::Error) -> MyError {
+ MyError(anyhow::anyhow!("{err}"))
+ }
+}