summaryrefslogtreecommitdiff
path: root/src/error.rs
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2023-02-13 21:02:09 +0100
committermetamuffin <metamuffin@disroot.org>2023-02-13 21:02:09 +0100
commit9cefa70c3594445c3af6428be982b8b5b5883a42 (patch)
treecebfeb0026348d83666674aaece3ae22b13ba5dc /src/error.rs
parentad483c540b24b4adc1cdab5bdf62772ba19b615a (diff)
downloadmetamuffin-website-9cefa70c3594445c3af6428be982b8b5b5883a42.tar
metamuffin-website-9cefa70c3594445c3af6428be982b8b5b5883a42.tar.bz2
metamuffin-website-9cefa70c3594445c3af6428be982b8b5b5883a42.tar.zst
include blog (2)
Diffstat (limited to 'src/error.rs')
-rw-r--r--src/error.rs59
1 files changed, 59 insertions, 0 deletions
diff --git a/src/error.rs b/src/error.rs
new file mode 100644
index 0000000..1fe89da
--- /dev/null
+++ b/src/error.rs
@@ -0,0 +1,59 @@
+use std::fmt::Display;
+
+use crate::layout::{DynScaffold, Scaffold};
+use rocket::{
+ catch,
+ http::Status,
+ response::{self, Responder},
+ Request,
+};
+
+#[catch(default)]
+pub fn r_catch<'a>(status: Status, _request: &Request) -> DynScaffold<'a> {
+ Scaffold {
+ title: "Error".to_string(),
+ content: markup::new! {
+ h2 { "Error" }
+ p { @format!("{status}") }
+ },
+ }
+}
+
+pub type MyResult<T> = Result<T, MyError>;
+
+#[derive(Debug)]
+pub struct MyError(pub anyhow::Error);
+
+impl<'r> Responder<'r, 'static> for MyError {
+ fn respond_to(self, req: &'r Request<'_>) -> response::Result<'static> {
+ Scaffold {
+ title: "Error".to_string(),
+ content: markup::new! {
+ h2 { "An error occured. Nobody is sorry"}
+ pre.error { @format!("{:?}", self.0) }
+ },
+ }
+ .respond_to(req)
+ }
+}
+
+impl Display for MyError {
+ fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
+ self.0.fmt(f)
+ }
+}
+// impl<T: std::error::Error> From<T> for MyError {
+// fn from(err: T) -> MyError {
+// MyError(anyhow::anyhow!("{err}"))
+// }
+// }
+impl From<std::io::Error> for MyError {
+ fn from(err: std::io::Error) -> MyError {
+ MyError(anyhow::anyhow!("{err}"))
+ }
+}
+impl From<anyhow::Error> for MyError {
+ fn from(err: anyhow::Error) -> MyError {
+ MyError(err)
+ }
+}