From d75ea2d66104260247ae138bfba872e49b7b1820 Mon Sep 17 00:00:00 2001 From: "Jose E. Cribeiro Aneiros" Date: Fri, 17 Jul 2026 11:59:47 +0200 Subject: [PATCH] feat: Handle preprocess errors --- src/erf_router.erl | 39 ++++++++++++++++++++------------------- 1 file changed, 20 insertions(+), 19 deletions(-) diff --git a/src/erf_router.erl b/src/erf_router.erl index 71fe5de..22676b4 100644 --- a/src/erf_router.erl +++ b/src/erf_router.erl @@ -117,30 +117,31 @@ handle(Name, RawRequest) -> {ok, PreProcessMiddlewares} = erf_conf:preprocess_middlewares(Name), {ok, RouterMod} = erf_conf:router_mod(Name), {ok, PostProcessMiddlewares} = erf_conf:postprocess_middlewares(Name), - case preprocess(RawRequest) of - {ok, Request} -> - {InitialResponse, InitialRequest} = + {InitialResponse, InitialRequest} = + case preprocess(RawRequest) of + {ok, Request} -> case apply_preprocess_middlewares(Request, PreProcessMiddlewares) of {stop, PreprocessResponse, PreprocessRequest} -> {PreprocessResponse, PreprocessRequest}; PreprocessRequest -> {RouterMod:handle(PreprocessRequest), PreprocessRequest} - end, - Response = apply_postprocess_middlewares( - InitialRequest, InitialResponse, PostProcessMiddlewares - ), - postprocess(InitialRequest, Response); - {error, _Reason} -> - ContentTypeHeader = string:casefold(<<"content-type">>), - ErrorBody = iolist_to_binary( - json:encode(#{ - <<"title">> => <<"Bad Request">>, - <<"status">> => 400, - <<"detail">> => <<"Failed to read request">> - }) - ), - {400, [{ContentTypeHeader, <<"application/json">>}], ErrorBody} - end. + end; + {error, _Reason} -> + ContentTypeHeader = string:casefold(<<"content-type">>), + ErrorBody = iolist_to_binary( + json:encode(#{ + <<"title">> => <<"Bad Request">>, + <<"status">> => 400, + <<"detail">> => <<"Failed to read request">> + }) + ), + ResponseError = {400, [{ContentTypeHeader, <<"application/json">>}], ErrorBody}, + {ResponseError, RawRequest} + end, + Response = apply_postprocess_middlewares( + InitialRequest, InitialResponse, PostProcessMiddlewares + ), + postprocess(InitialRequest, Response). %%%----------------------------------------------------------------------------- %%% INTERNAL FUNCTIONS