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

Merge remote-tracking branch 'nox/improve-http-req'

This commit is contained in:
Loïc Hoguin 2011-03-29 14:48:40 +02:00
commit e6e5b1767f

View file

@ -1,4 +1,5 @@
%% Copyright (c) 2011, Loïc Hoguin <essen@dev-extend.eu> %% Copyright (c) 2011, Loïc Hoguin <essen@dev-extend.eu>
%% Copyright (c) 2011, Anthony Ramine <nox@dev-extend.eu>
%% %%
%% Permission to use, copy, modify, and/or distribute this software for any %% Permission to use, copy, modify, and/or distribute this software for any
%% purpose with or without fee is hereby granted, provided that the above %% purpose with or without fee is hereby granted, provided that the above
@ -72,24 +73,22 @@ raw_path(Req) ->
-spec qs_val(Name::string(), Req::#http_req{}) -spec qs_val(Name::string(), Req::#http_req{})
-> {Value::string() | true | undefined, Req::#http_req{}}. -> {Value::string() | true | undefined, Req::#http_req{}}.
qs_val(Name, Req=#http_req{raw_qs=RawQs, qs_vals=undefined}) -> %% @equiv qs_val(Name, Req) -> qs_val(Name, Req, undefined)
QsVals = parse_qs(RawQs),
qs_val(Name, Req#http_req{qs_vals=QsVals});
qs_val(Name, Req) -> qs_val(Name, Req) ->
qs_val(Name, Req, undefined).
-spec qs_val(Name::string(), Req::#http_req{}, Default)
-> {Value::string() | true | Default, Req::#http_req{}}
when Default::term().
qs_val(Name, Req=#http_req{raw_qs=RawQs, qs_vals=undefined}, Default) ->
QsVals = parse_qs(RawQs),
qs_val(Name, Req#http_req{qs_vals=QsVals}, Default);
qs_val(Name, Req, Default) ->
case lists:keyfind(Name, 1, Req#http_req.qs_vals) of case lists:keyfind(Name, 1, Req#http_req.qs_vals) of
{Name, Value} -> {Value, Req}; {Name, Value} -> {Value, Req};
false -> {undefined, Req} false -> {Default, Req}
end. end.
-spec qs_val(Name::string(), Default::term(), Req::#http_req{})
-> {Value::string() | term() | true, Req::#http_req{}}.
qs_val(Name, Default, Req=#http_req{raw_qs=RawQs, qs_vals=undefined}) ->
QsVals = parse_qs(RawQs),
qs_val(Name, Default, Req#http_req{qs_vals=QsVals});
qs_val(Name, Default, Req) ->
Value = proplists:get_value(Name, Req#http_req.qs_vals, Default),
{Value, Req}.
-spec qs_vals(Req::#http_req{}) -spec qs_vals(Req::#http_req{})
-> {list({Name::string(), Value::string() | true}), Req::#http_req{}}. -> {list({Name::string(), Value::string() | true}), Req::#http_req{}}.
qs_vals(Req=#http_req{raw_qs=RawQs, qs_vals=undefined}) -> qs_vals(Req=#http_req{raw_qs=RawQs, qs_vals=undefined}) ->
@ -104,18 +103,18 @@ raw_qs(Req) ->
-spec binding(Name::atom(), Req::#http_req{}) -spec binding(Name::atom(), Req::#http_req{})
-> {Value::string() | undefined, Req::#http_req{}}. -> {Value::string() | undefined, Req::#http_req{}}.
%% @equiv binding(Name, Req) -> binding(Name, Req, undefined)
binding(Name, Req) -> binding(Name, Req) ->
binding(Name, Req, undefined).
-spec binding(Name::atom(), Req::#http_req{}, Default)
-> {Value::string() | Default, Req::#http_req{}} when Default::term().
binding(Name, Req, Default) ->
case lists:keyfind(Name, 1, Req#http_req.bindings) of case lists:keyfind(Name, 1, Req#http_req.bindings) of
{Name, Value} -> {Value, Req}; {Name, Value} -> {Value, Req};
false -> {undefined, Req} false -> {Default, Req}
end. end.
-spec binding(Name::atom(), Default::term(), Req::#http_req{})
-> {Value::string() | term(), Req::#http_req{}}.
binding(Name, Default, Req) ->
Value = proplists:get_value(Name, Req#http_req.bindings, Default),
{Value, Req}.
-spec bindings(Req::#http_req{}) -spec bindings(Req::#http_req{})
-> {list({Name::atom(), Value::string()}), Req::#http_req{}}. -> {list({Name::atom(), Value::string()}), Req::#http_req{}}.
bindings(Req) -> bindings(Req) ->
@ -123,18 +122,18 @@ bindings(Req) ->
-spec header(Name::atom() | string(), Req::#http_req{}) -spec header(Name::atom() | string(), Req::#http_req{})
-> {Value::string() | undefined, Req::#http_req{}}. -> {Value::string() | undefined, Req::#http_req{}}.
%% @equiv header(Name, Req) -> header(Name, Req, undefined)
header(Name, Req) -> header(Name, Req) ->
header(Name, Req, undefined).
-spec header(Name::atom() | string(), Req::#http_req{}, Default)
-> {Value::string() | Default, Req::#http_req{}} when Default::term().
header(Name, Req, Default) ->
case lists:keyfind(Name, 1, Req#http_req.headers) of case lists:keyfind(Name, 1, Req#http_req.headers) of
{Name, Value} -> {Value, Req}; {Name, Value} -> {Value, Req};
false -> {undefined, Req} false -> {Default, Req}
end. end.
-spec header(Name::atom() | string(), Default::term(), Req::#http_req{})
-> {Value::string() | term(), Req::#http_req{}}.
header(Name, Default, Req) ->
Value = proplists:get_value(Name, Req#http_req.headers, Default),
{Value, Req}.
-spec headers(Req::#http_req{}) -spec headers(Req::#http_req{})
-> {list({Name::atom() | string(), Value::string()}), Req::#http_req{}}. -> {list({Name::atom() | string(), Value::string()}), Req::#http_req{}}.
headers(Req) -> headers(Req) ->
@ -148,7 +147,7 @@ headers(Req) ->
body(Req) -> body(Req) ->
{Length, Req2} = cowboy_http_req:header('Content-Length', Req), {Length, Req2} = cowboy_http_req:header('Content-Length', Req),
case Length of case Length of
"" -> {error, badarg}; undefined -> {error, badarg};
_Any -> _Any ->
Length2 = list_to_integer(Length), Length2 = list_to_integer(Length),
body(Length2, Req2) body(Length2, Req2)