# `Honeybadger.HTTPAdapter`
[🔗](https://github.com/honeybadger-io/honeybadger-elixir/blob/v0.30.2/lib/honeybadger/http_adapter.ex#L1)

HTTP adapter helper module.

You can configure the HTTP adapter that Honeybadger uses by setting the
following option:

    http_adapter: Honeybadger.HTTPAdapter.Req

Default options can be set by passing a list of options:

    http_adapter: {Honeybadger.HTTPAdapter.Req, [...]}

You can also set the client for the application:

    config :honeybadger, :http_adapter, Honeybadger.HTTPAdapter.Req

## Usage
    defmodule MyApp.MyHTTPAdapter do
      @behaviour Honeybadger.HTTPAdapter

      @impl true
      def request(method, url, body, headers, opts) do
        # ...
      end

      @impl true
      def decode_response_body(response, opts) do
        # ...
      end
    end

# `body`

```elixir
@type body() :: binary() | nil
```

# `headers`

```elixir
@type headers() :: [{binary(), binary()}]
```

# `method`

```elixir
@type method() :: :get | :post
```

# `decode_response_body`

```elixir
@callback decode_response_body(Honeybadger.HTTPAdapter.HTTPResponse.t(), Keyword.t()) ::
  {:ok, Honeybadger.HTTPAdapter.HTTPResponse.t()}
  | {:error, Honeybadger.InvalidResponseError.t()}
```

# `request`

```elixir
@callback request(method(), binary(), body(), headers(), Keyword.t()) ::
  {:ok, map()} | {:error, any()}
```

# `request`

```elixir
@spec request(atom(), binary(), binary() | nil, list(), Keyword.t()) ::
  {:ok, Honeybadger.HTTPAdapter.HTTPResponse.t()}
  | {:error, Honeybadger.HTTPAdapter.HTTPResponse.t()}
  | {:error, term()}
```

Makes an HTTP request.

## Options

- `:http_adapter` - The HTTP adapter to use, defaults to to one of the available adapters
  (Req is preferred, falling back to Hackney if available)

# `validate_adapter_availability!`

Validates that the configured HTTP adapter's dependencies are available.

This should be called during application startup to ensure that the
configured adapter can be used.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
