0
Fork 0
mirror of https://github.com/ninenines/cowboy.git synced 2025-07-14 20:30:23 +00:00

Improve consistency of return types for cowboy_req API

The signature of parse_header, body_qs, multipart_data and
the set_resp_* functions has changed.

See the cowboy_req module edoc for more details.
This commit is contained in:
Loïc Hoguin 2012-09-16 03:51:07 +02:00
parent e13ab806ea
commit 8d5f8db90a
9 changed files with 116 additions and 103 deletions

View file

@ -599,9 +599,7 @@ onrequest_reply(Config) ->
onrequest_hook(Req) ->
case cowboy_req:qs_val(<<"reply">>, Req) of
{undefined, Req2} ->
{ok, Req3} = cowboy_req:set_resp_header(
'Server', <<"Serenity">>, Req2),
Req3;
cowboy_req:set_resp_header('Server', <<"Serenity">>, Req2);
{_, Req2} ->
{ok, Req3} = cowboy_req:reply(
200, [], <<"replied!">>, Req2),

View file

@ -8,22 +8,22 @@ init({_Transport, http}, Req, []) ->
{ok, Req, {}}.
handle(Req, State) ->
{Result, Req2} = acc_multipart(Req, []),
{Result, Req2} = acc_multipart(Req),
{ok, Req3} = cowboy_req:reply(200, [], term_to_binary(Result), Req2),
{ok, Req3, State}.
terminate(_Req, _State) ->
ok.
acc_multipart(Req, Acc) ->
{Result, Req2} = cowboy_req:multipart_data(Req),
acc_multipart(Req2, Acc, Result).
acc_multipart(Req) ->
acc_multipart(cowboy_req:multipart_data(Req), []).
acc_multipart(Req, Acc, {headers, Headers}) ->
acc_multipart(Req, [{Headers, []}|Acc]);
acc_multipart(Req, [{Headers, BodyAcc}|Acc], {body, Data}) ->
acc_multipart(Req, [{Headers, [Data|BodyAcc]}|Acc]);
acc_multipart(Req, [{Headers, BodyAcc}|Acc], end_of_part) ->
acc_multipart(Req, [{Headers, list_to_binary(lists:reverse(BodyAcc))}|Acc]);
acc_multipart(Req, Acc, eof) ->
acc_multipart({headers, Headers, Req}, Acc) ->
acc_multipart(cowboy_req:multipart_data(Req), [{Headers, []}|Acc]);
acc_multipart({body, Data, Req}, [{Headers, BodyAcc}|Acc]) ->
acc_multipart(cowboy_req:multipart_data(Req), [{Headers, [Data|BodyAcc]}|Acc]);
acc_multipart({end_of_part, Req}, [{Headers, BodyAcc}|Acc]) ->
acc_multipart(cowboy_req:multipart_data(Req),
[{Headers, list_to_binary(lists:reverse(BodyAcc))}|Acc]);
acc_multipart({eof, Req}, Acc) ->
{lists:reverse(Acc), Req}.

View file

@ -7,14 +7,12 @@
init({_Transport, http}, Req, Opts) ->
Headers = proplists:get_value(headers, Opts, []),
Body = proplists:get_value(body, Opts, <<"http_handler_set_resp">>),
{ok, Req2} = lists:foldl(fun({Name, Value}, {ok, R}) ->
Req2 = lists:foldl(fun({Name, Value}, R) ->
cowboy_req:set_resp_header(Name, Value, R)
end, {ok, Req}, Headers),
{ok, Req3} = cowboy_req:set_resp_body(Body, Req2),
{ok, Req4} = cowboy_req:set_resp_header(
<<"X-Cowboy-Test">>, <<"ok">>, Req3),
{ok, Req5} = cowboy_req:set_resp_cookie(
<<"cake">>, <<"lie">>, [], Req4),
end, Req, Headers),
Req3 = cowboy_req:set_resp_body(Body, Req2),
Req4 = cowboy_req:set_resp_header(<<"X-Cowboy-Test">>, <<"ok">>, Req3),
Req5 = cowboy_req:set_resp_cookie(<<"cake">>, <<"lie">>, [], Req4),
{ok, Req5, undefined}.
handle(Req, State) ->

View file

@ -16,7 +16,7 @@ handle(Req, State=#state{headers=_Headers, body=Body, reply=set_resp}) ->
{ok, Transport, Socket} = cowboy_req:transport(Req),
SFun = fun() -> Transport:send(Socket, Body), sent end,
SLen = iolist_size(Body),
{ok, Req2} = cowboy_req:set_resp_body_fun(SLen, SFun, Req),
Req2 = cowboy_req:set_resp_body_fun(SLen, SFun, Req),
{ok, Req3} = cowboy_req:reply(200, Req2),
{ok, Req3, State}.