aboutsummaryrefslogtreecommitdiffstats
path: root/src/cowboy_rest.erl
diff options
context:
space:
mode:
authorLoïc Hoguin <[email protected]>2024-01-16 16:28:52 +0100
committerLoïc Hoguin <[email protected]>2024-01-16 16:28:52 +0100
commitdefce46fdf85d16bbe3c0a8de6058334e8a53775 (patch)
treed26ddce251a9f633b7cd20684e9eb3b8e97d40d4 /src/cowboy_rest.erl
parentec12c2f051f94df6f4c86175caddc0d1108254cd (diff)
downloadcowboy-defce46fdf85d16bbe3c0a8de6058334e8a53775.tar.gz
cowboy-defce46fdf85d16bbe3c0a8de6058334e8a53775.tar.bz2
cowboy-defce46fdf85d16bbe3c0a8de6058334e8a53775.zip
REST: Allow generate_etag to return undefined
This allows conditionally generating an etag.
Diffstat (limited to 'src/cowboy_rest.erl')
-rw-r--r--src/cowboy_rest.erl8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/cowboy_rest.erl b/src/cowboy_rest.erl
index 7d0fe80..003e5f9 100644
--- a/src/cowboy_rest.erl
+++ b/src/cowboy_rest.erl
@@ -97,7 +97,7 @@
-optional_callbacks([forbidden/2]).
-callback generate_etag(Req, State)
- -> {binary() | {weak | strong, binary()}, Req, State}
+ -> {binary() | {weak | strong, binary()} | undefined, Req, State}
when Req::cowboy_req:req(), State::any().
-optional_callbacks([generate_etag/2]).
@@ -1527,6 +1527,12 @@ generate_etag(Req, State=#state{etag=undefined}) ->
case unsafe_call(Req, State, generate_etag) of
no_call ->
{undefined, Req, State#state{etag=no_call}};
+ %% We allow the callback to return 'undefined'
+ %% to allow conditionally generating etags. We
+ %% handle 'undefined' the same as if the function
+ %% was not exported.
+ {undefined, Req2, State2} ->
+ {undefined, Req2, State2#state{etag=no_call}};
{Etag, Req2, State2} when is_binary(Etag) ->
Etag2 = cow_http_hd:parse_etag(Etag),
{Etag2, Req2, State2#state{etag=Etag2}};