Packages
pillar
0.3.1
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/response_parser.ex
defmodule Pillar.ResponseParser do
@moduledoc false
alias Pillar.HttpClient.Response
alias Pillar.HttpClient.TransportError
alias Pillar.TypeConvert.ToElixir
def parse(%Response{status_code: 200, body: ""}) do
{:ok, ""}
end
def parse(%Response{status_code: 200, body: body}) do
case Jason.decode(body) do
{:ok, map} ->
meta = join_meta_to_map(map["meta"])
{:ok, Enum.map(map["data"], fn row -> convert_row(meta, row) end)}
{:error, reason} ->
{:error, reason}
end
end
def parse(%Response{status_code: _any, body: _body} = resp) do
{:error, resp}
end
def parse(%TransportError{} = error) do
{:error, error}
end
defp join_meta_to_map(meta_list) do
meta_list
|> Enum.reduce(%{}, fn %{"name" => name, "type" => type}, final_map ->
Map.put(final_map, name, type)
end)
end
defp convert_row(meta, row) do
row
|> Enum.map(fn {key, value} ->
{key, ToElixir.convert(meta[key], value)}
end)
|> Map.new()
end
end