Packages
pillar
0.17.3
0.40.0
0.39.0
0.38.0
0.37.0
0.36.0
0.35.0
0.34.1
0.34.0
0.33.1
0.33.0
0.32.0
0.31.0
0.30.0
0.29.1
0.29.0
0.28.0
0.27.0
0.26.1
0.26.0
0.25.1
0.25.0
0.24.0
0.23.3
0.23.2
0.23.1
0.23.0
0.22.0
0.21.0
0.20.0
0.19.0
0.18.2
0.18.1
0.18.0
0.17.3
0.17.2
0.17.1
0.17.0
0.16.2
0.16.1
0.16.0
0.15.0
0.14.0
0.13.1
0.13.0
0.12.0
0.11.0
0.10.0
0.9.1
0.9.0
0.8.1
0.8.0
0.7.0
0.6.0
0.5.1
0.5.0
0.4.0
0.3.2
0.3.1
0.3.0
0.2.1
0.2.0
0.1.0
Elixir client for ClickHouse, a fast open-source Online Analytical Processing (OLAP) database management system.
Current section
Files
Jump to
Current section
Files
lib/pillar/http_client.ex
defmodule Pillar.HttpClient do
@moduledoc false
alias Pillar.HttpClient.Response
alias Pillar.HttpClient.TransportError
def post(url, post_body \\ "", options \\ [timeout: 10_000]) do
result =
:httpc.request(
:post,
{String.to_charlist(url), [], 'application/json', post_body},
options,
[]
)
response_to_app_structure(result)
end
defp response_to_app_structure(response_tuple) do
case response_tuple do
{:ok, {{_http_ver, status_code, _a_status_desc}, headers, body}} ->
%Response{
status_code: status_code,
body: format_body(body),
headers: downcase_headers_names(headers)
}
{:error, reason} ->
%TransportError{reason: reason}
end
end
defp downcase_headers_names(headers) do
Enum.map(headers, fn {charlist_key, value} ->
string_key = to_string(charlist_key)
{String.downcase(string_key), to_string(value)}
end)
end
defp format_body(data) when is_binary(data), do: data
defp format_body(data) when is_list(data), do: IO.iodata_to_binary(data)
end