Packages
goth
1.3.0-rc.2
1.4.5
1.4.4
1.4.3
1.4.2
1.4.1
1.4.0
1.3.1
1.3.0
1.3.0-rc.5
1.3.0-rc.4
1.3.0-rc.3
1.3.0-rc.2
1.3.0-rc.1
1.3.0-rc.0
1.2.0
1.1.0
1.0.1
1.0.1-beta
1.0.0
0.11.1
0.11.0
0.10.0
0.9.0
0.8.2
0.8.1
0.8.0
0.7.2
0.7.1
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.6
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
0.0.3
0.0.2
0.0.1
A simple library to generate and retrieve Oauth2 tokens for use with Google Cloud Service accounts.
Current section
Files
Jump to
Current section
Files
lib/goth/http_client/hackney.ex
defmodule Goth.HTTPClient.Hackney do
@moduledoc """
Hackney-based HTTP client adapter.
## Options
* `:default_opts` - default options passed down to Hackney, see `:hackney.request/5` for
more information.
"""
@behaviour Goth.HTTPClient
defstruct default_opts: []
require Logger
@impl true
def init(opts) do
unless Code.ensure_loaded?(:hackney) do
Logger.error("""
Could not find hackney dependency.
Please add :hackney to your dependencies:
{:hackney, "~> 1.17"}
Or use a different HTTP client. See Goth.HTTPClient for more information.
""")
raise "missing hackney dependency"
end
{:ok, _} = Application.ensure_all_started(:hackney)
struct!(__MODULE__, opts)
end
@impl true
def request(method, url, headers, body, opts, state) do
opts = Keyword.merge(state.default_opts, opts)
with {:ok, status, headers, body_ref} <- :hackney.request(method, url, headers, body, opts),
{:ok, body} <- :hackney.body(body_ref) do
{:ok, %{status: status, headers: headers, body: body}}
else
{:error, reason} ->
{:error, RuntimeError.exception(inspect(reason))}
end
end
end