# `ExGram.Adapter`
[🔗](https://github.com/rockneurotiko/ex_gram/blob/0.64.0/lib/ex_gram/adapter.ex#L1)

Behaviour for HTTP adapters.

ExGram ships with three adapters:
- `ExGram.Adapter.Req` - Recommended, uses Req
- `ExGram.Adapter.Tesla` - Uses Tesla with configurable middleware
- `ExGram.Adapter.Test` - For testing, see [Testing guide](testing.md)

Implement this behaviour to create a custom adapter.

# `body`

```elixir
@type body() :: map() | list()
```

# `path`

```elixir
@type path() :: String.t()
```

# `result_request`

```elixir
@type result_request() :: {:ok, map()} | {:error, ExGram.Error.t()}
```

# `verb`

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

# `request`

```elixir
@callback request(verb(), path(), body(), keyword()) :: result_request()
```

# `encode`

# `filter_map`

---

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