Skip to content

Commit 5c13d9d

Browse files
committed
refactor error handling
1 parent 375e06f commit 5c13d9d

4 files changed

Lines changed: 23 additions & 14 deletions

File tree

src/error.rs

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -67,32 +67,31 @@ impl IntoResponse for AppError {
6767

6868
impl AppError {
6969
fn error_page(&self) -> (StatusCode, Html<String>) {
70-
match self {
70+
let (status, msg) = match self {
7171
Self::NoFile => (
7272
StatusCode::BAD_REQUEST,
73-
Page::error("No file found in request."),
73+
"No file found in request. Please select an image.",
7474
),
7575
Self::Multipart(_) => (
7676
StatusCode::BAD_REQUEST,
77-
Page::error("There was a problem with your file upload. Please try again."),
77+
"There was a problem with your file upload. Please try again.",
7878
),
7979
Self::ImageResTooLarge => (
8080
StatusCode::PAYLOAD_TOO_LARGE,
81-
Page::error("The image resolution is too large. Maximum is 10k x 10k pixels."),
81+
"The image resolution is too large. Maximum is 10k x 10k pixels.",
8282
),
8383
Self::WrongFileType => (
8484
StatusCode::BAD_REQUEST,
85-
Page::error("Incorrect file type. Please upload a JPG, PNG, GIF, or WEBP file."),
86-
),
87-
Self::ImageNotFound => (
88-
StatusCode::NOT_FOUND,
89-
Page::error("We couldn't find that image."),
85+
"Incorrect file type. Please upload a JPG, PNG, GIF, or WEBP file.",
9086
),
87+
Self::ImageNotFound => (StatusCode::NOT_FOUND, "We couldn't find that image."),
9188

9289
_ => (
9390
StatusCode::INTERNAL_SERVER_ERROR,
94-
Page::error("Please help I have internal errors."),
91+
"Please help I have internal errors. D:",
9592
),
96-
}
93+
};
94+
95+
(status, Page::error(status, msg))
9796
}
9897
}

src/main.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ use axum::{
88
};
99
use error::AppError;
1010
use pages::Page;
11+
use reqwest::StatusCode;
1112
use tokio::io::{self};
1213
use tower_http::{services::ServeDir, trace::TraceLayer};
1314
use tower_sessions::{MemoryStore, Session, SessionManagerLayer, cookie::SameSite};
@@ -51,7 +52,10 @@ async fn main() -> Result<(), io::Error> {
5152
.route("/image", post(Image::post).delete(Image::delete))
5253
.route("/image/{id}", get(Image::get))
5354
.nest_service("/static", static_dir)
54-
.route("/{*wildcard}", get(|| async { Page::error("404") }))
55+
.route(
56+
"/{*wildcard}",
57+
get(|| async { Page::error(StatusCode::NOT_FOUND, "404") }),
58+
)
5559
.layer(sess_mw)
5660
.layer(DefaultBodyLimit::max(10_485_760))
5761
.layer(TraceLayer::new_for_http());

src/pages.rs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
use axum::response::Html;
2+
use reqwest::StatusCode;
23

34
static LOGIN_HTML: &str = include_str!("../templates/login.html");
45
static UPLOAD_HTML: &str = include_str!("../templates/upload.html");
@@ -19,7 +20,11 @@ impl Page {
1920
Html(LOGIN_HTML.to_string())
2021
}
2122

22-
pub fn error(msg: &str) -> Html<String> {
23-
Html(ERROR_HTML.replace("{{error_message}}", msg))
23+
pub fn error(status_code: StatusCode, msg: &str) -> Html<String> {
24+
Html(
25+
ERROR_HTML
26+
.replace("{{error_message}}", msg)
27+
.replace("{{status_code}}", &status_code.as_u16().to_string()),
28+
)
2429
}
2530
}

templates/error.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
<body>
44
<div class="card">
55
<div>Ono! An error!</div>
6+
<div>{{status_code}}</div>
67
<div style="font-size: 1rem">{{error_message}}</div>
78
<a href="/">Go Back</a>
89
</div>

0 commit comments

Comments
 (0)