From ff661ae26b45cf21ab555387bce53a2894298908 Mon Sep 17 00:00:00 2001 From: postscriptum Date: Sun, 22 Mar 2026 12:42:24 +0200 Subject: [PATCH] handle http errors --- src/main.rs | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/src/main.rs b/src/main.rs index c79792e..83c0efd 100644 --- a/src/main.rs +++ b/src/main.rs @@ -10,7 +10,7 @@ use fast_socks5::{ use list::List; use log::*; use opt::{AuthMode, Opt}; -use rocket::{State, serde::json::Json}; +use rocket::{State, http::Status, serde::json::Json}; use stats::{Snapshot, Total}; use std::{future::Future, sync::Arc}; use structopt::StructOpt; @@ -22,19 +22,33 @@ async fn index(totals: &State>) -> Json { } #[rocket::get("/allow/")] -async fn allow(rule: &str, list: &State>, totals: &State>) -> Json { +async fn allow( + rule: &str, + list: &State>, + totals: &State>, +) -> Result, Status> { let result = list.allow(rule).await; totals.set_entries(list.entries().await); info!("Delete `{rule}` from the in-memory rules (operation status: {result:?})"); - Json(result.is_ok_and(|v| v)) + Ok(Json(result.map_err(|e| { + error!("Allow request handle error for `{rule}`: `{e}`"); + Status::InternalServerError + })?)) } #[rocket::get("/block/")] -async fn block(rule: &str, list: &State>, totals: &State>) -> Json { +async fn block( + rule: &str, + list: &State>, + totals: &State>, +) -> Result, Status> { let result = list.block(rule).await; totals.set_entries(list.entries().await); info!("Add `{rule}` to the in-memory rules (operation status: {result:?})"); - Json(result.is_ok_and(|v| v)) + Ok(Json(result.map_err(|e| { + error!("Block request handle error for `{rule}`: `{e}`"); + Status::InternalServerError + })?)) } #[rocket::launch]