diff options
Diffstat (limited to 'src/r3_hex_http_httpc.erl')
-rw-r--r-- | src/r3_hex_http_httpc.erl | 39 |
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). |