Skip to content

Commit a8dc196

Browse files
author
Danil Zagoskin
committed
openapi_client: configurable http request function
1 parent 56e562b commit a8dc196

1 file changed

Lines changed: 27 additions & 14 deletions

File tree

src/openapi_client.erl

Lines changed: 27 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -61,20 +61,8 @@ call(#{schema := Schema, uri := URI} = State, OperationId, Args0, Opts) when is_
6161
#{raw_body := _} -> <<"raw_file_upload">>;
6262
_ -> RequestBody
6363
end]),
64-
Timeout = proplists:get_value(timeout, Opts, 50000),
65-
Request = case Method of
66-
get ->
67-
{RequestURL, RequestHeaders};
68-
_ ->
69-
ContentType = proplists:get_value("Content-Type", RequestHeaders, "text/plain"),
70-
{RequestURL, RequestHeaders, ContentType, RequestBody}
71-
end,
72-
Result = case httpc:request(Method, Request, [{timeout, Timeout}], [{body_format, binary}]) of
73-
{ok, {{_, Code0, _}, ResponseHeaders0, Bin0}} ->
74-
{ok, Code0, [{string:to_lower(K),V} || {K,V} <- ResponseHeaders0], Bin0};
75-
{error, E0} ->
76-
{error, E0}
77-
end,
64+
HttpRequestFun = proplists:get_value(http_request_fun, Opts, fun http_request_httpc/5),
65+
Result = HttpRequestFun(Method, RequestURL, RequestHeaders, RequestBody, Opts),
7866

7967
case Result of
8068
{ok, Code,ResponseHeaders,Bin} when is_map_key(Code, Responses) ->
@@ -137,6 +125,31 @@ call(#{} = State, OperationId, Args, Opts) ->
137125
end.
138126

139127

128+
-spec http_request_httpc(
129+
Method :: get | post | put | patch | delete,
130+
URL :: uri_string:uri_string(),
131+
Headers :: [{string(), string()}],
132+
Body :: binary(),
133+
Opts :: proplists:proplist()
134+
) ->
135+
{ok, Status :: integer(), Headers :: [{NameLowercase :: string(), string()}], Body :: binary()} |
136+
{error, any()}.
137+
138+
http_request_httpc(Method, RequestURL, RequestHeaders, RequestBody, Opts) ->
139+
Timeout = proplists:get_value(timeout, Opts, 50000),
140+
Request = case Method of
141+
get ->
142+
{RequestURL, RequestHeaders};
143+
_ ->
144+
ContentType = proplists:get_value("Content-Type", RequestHeaders, "text/plain"),
145+
{RequestURL, RequestHeaders, ContentType, RequestBody}
146+
end,
147+
case httpc:request(Method, Request, [{timeout, Timeout}], [{body_format, binary}]) of
148+
{ok, {{_, Code0, _}, ResponseHeaders0, Bin0}} ->
149+
{ok, Code0, [{string:to_lower(K), V} || {K, V} <- ResponseHeaders0], Bin0};
150+
{error, E0} ->
151+
{error, E0}
152+
end.
140153

141154

142155
search_operation(OperationId, #{paths := Paths}) ->

0 commit comments

Comments
 (0)