diff options
author | metamuffin <metamuffin@disroot.org> | 2023-01-10 08:44:06 +0100 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2023-01-10 08:44:06 +0100 |
commit | 0c30e065b678d41d8932b3bf0926608cfa15a7ac (patch) | |
tree | 0dd1c03c25ed49b97985d840790b108f2d4fe967 /src/frontend/pages/mod.rs | |
parent | c64d3cd8cda389909b4b3dbdf00c0710e2c9a490 (diff) | |
download | jellything-0c30e065b678d41d8932b3bf0926608cfa15a7ac.tar jellything-0c30e065b678d41d8932b3bf0926608cfa15a7ac.tar.bz2 jellything-0c30e065b678d41d8932b3bf0926608cfa15a7ac.tar.zst |
first listing
Diffstat (limited to 'src/frontend/pages/mod.rs')
-rw-r--r-- | src/frontend/pages/mod.rs | 61 |
1 files changed, 60 insertions, 1 deletions
diff --git a/src/frontend/pages/mod.rs b/src/frontend/pages/mod.rs index 08e0e77..6e7bd87 100644 --- a/src/frontend/pages/mod.rs +++ b/src/frontend/pages/mod.rs @@ -1,7 +1,17 @@ -use actix_web::{body::BoxBody, http::StatusCode, HttpResponseBuilder, Responder}; +use std::{error::Error, fmt::Display}; + +use actix_web::{ + body::BoxBody, + http::{ + header::{HeaderName, HeaderValue}, + StatusCode, + }, + HttpResponseBuilder, Responder, +}; pub mod home; pub mod layout; +pub mod node; struct HtmlTemplate<T>(pub T); @@ -17,3 +27,52 @@ impl<T: markup::Render> Responder for HtmlTemplate<T> { .respond_to(req) } } + +pub struct ContentType<T>(pub &'static str, pub T); + +impl<T: Responder> Responder for ContentType<T> { + type Body = T::Body; + + fn respond_to(self, req: &actix_web::HttpRequest) -> actix_web::HttpResponse<Self::Body> { + let mut r = self.1.respond_to(req); + r.headers_mut().insert( + HeaderName::from_static("content-type"), + HeaderValue::from_static(self.0), + ); + r + } +} + +pub type MyResult<T> = actix_web::Result<T, MyError>; + +#[derive(Debug)] +pub struct MyError(anyhow::Error); + +impl Responder for MyError { + type Body = BoxBody; + fn respond_to(self, req: &actix_web::HttpRequest) -> actix_web::HttpResponse<Self::Body> { + HttpResponseBuilder::new(StatusCode::BAD_REQUEST) + .body(format!("error: {}", self.0)) + .respond_to(req) + } +} +impl actix_web::error::ResponseError for MyError { + fn status_code(&self) -> StatusCode { + StatusCode::BAD_REQUEST + } +} +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}")) + } +} |