Current section

Files

Jump to
bingex lib bingex http adapter.ex
Raw

lib/bingex/http/adapter.ex

defmodule Bingex.HTTP.Adapter do
@moduledoc false
alias Bingex.HTTP.{Error, Request, Response}
@name Application.compile_env(:bingex, :finch, Bingex.Finch)
@spec request(Request.t()) :: {:ok, Response.t()} | {:error, Error.t()}
def request(%Request{} = request) do
request
|> adapt_request()
|> Finch.request(@name)
|> adapt_result()
end
defp adapt_result(result) do
case result do
{:ok, %Finch.Response{} = resp} -> {:ok, adapt_response(resp)}
{:error, error} -> {:error, adapt_error(error)}
end
end
defp adapt_request(%Request{} = request) do
Finch.build(
request.method,
request.url,
request.headers,
request.body
)
end
defp adapt_response(%Finch.Response{} = resp) do
%Response{
status: resp.status,
body: resp.body,
headers: resp.headers
}
end
defp adapt_error(%Finch.Error{reason: reason}) do
%Error{reason: reason}
end
defp adapt_error(reason) do
%Error{reason: reason}
end
end