%% 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).