diff options
author | Loïc Hoguin <[email protected]> | 2024-01-16 16:28:52 +0100 |
---|---|---|
committer | Loïc Hoguin <[email protected]> | 2024-01-16 16:28:52 +0100 |
commit | defce46fdf85d16bbe3c0a8de6058334e8a53775 (patch) | |
tree | d26ddce251a9f633b7cd20684e9eb3b8e97d40d4 /src/cowboy_rest.erl | |
parent | ec12c2f051f94df6f4c86175caddc0d1108254cd (diff) | |
download | cowboy-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.erl | 8 |
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}}; |