Current section

Files

Jump to
treedx lib treedx adapters common.ex
Raw

lib/treedx/adapters/common.ex

defmodule TreeDxSdk.Adapters.Common do
@moduledoc false
def segment(value), do: URI.encode(to_string(value), &URI.char_unreserved?/1)
def json_request(client, method, path, body \\ nil, query \\ %{}) do
request = %TreeDxSdk.Transport.Request{
method: method,
path: path,
body: body,
query: query || %{}
}
dispatch(client, request)
end
def binary_request(client, method, path, binary_body, query \\ %{}) do
request = %TreeDxSdk.Transport.Request{
method: method,
path: path,
binary_body: binary_body,
query: query || %{}
}
dispatch(client, request)
end
defp dispatch(%TreeDxSdk.Client{config: config}, request) do
case config.transport do
nil -> unwrap(TreeDxSdk.Transport.Httpc.request(config, request))
module when is_atom(module) -> unwrap(module.request(config, request))
{module, state} -> unwrap(module.request(state, config, request))
end
end
defp unwrap({:ok, %TreeDxSdk.Transport.Response{data: data}}), do: {:ok, data}
defp unwrap({:error, error}), do: {:error, error}
end