summaryrefslogtreecommitdiff
path: root/src/r3_hex_http_httpc.erl
diff options
context:
space:
mode:
Diffstat (limited to 'src/r3_hex_http_httpc.erl')
-rw-r--r--src/r3_hex_http_httpc.erl39
1 files changed, 39 insertions, 0 deletions
diff --git a/src/r3_hex_http_httpc.erl b/src/r3_hex_http_httpc.erl
new file mode 100644
index 0000000..0be9d16
--- /dev/null
+++ b/src/r3_hex_http_httpc.erl
@@ -0,0 +1,39 @@
+%% Vendored from hex_core v0.5.0, do not edit manually
+
+%% @hidden
+
+-module(r3_hex_http_httpc).
+-behaviour(r3_hex_http).
+-export([request/5]).
+
+%%====================================================================
+%% API functions
+%%====================================================================
+
+request(Method, URI, ReqHeaders, Body, AdapterConfig) ->
+ Profile = maps:get(profile, AdapterConfig, default),
+ Request = build_request(URI, ReqHeaders, Body),
+ {ok, {{_, StatusCode, _}, RespHeaders, RespBody}} =
+ httpc:request(Method, Request, [], [{body_format, binary}], Profile),
+ RespHeaders2 = load_headers(RespHeaders),
+ {ok, {StatusCode, RespHeaders2, RespBody}}.
+
+%%====================================================================
+%% Internal functions
+%%====================================================================
+
+build_request(URI, ReqHeaders, Body) ->
+ build_request2(binary_to_list(URI), dump_headers(ReqHeaders), Body).
+
+build_request2(URI, ReqHeaders, undefined) ->
+ {URI, ReqHeaders};
+build_request2(URI, ReqHeaders, {ContentType, Body}) ->
+ {URI, ReqHeaders, ContentType, Body}.
+
+dump_headers(Map) ->
+ maps:fold(fun(K, V, Acc) ->
+ [{binary_to_list(K), binary_to_list(V)} | Acc] end, [], Map).
+
+load_headers(List) ->
+ lists:foldl(fun({K, V}, Acc) ->
+ maps:put(list_to_binary(K), list_to_binary(V), Acc) end, #{}, List).