# `ExStorageServiceSdk.Transport`
[🔗](https://github.com/gsmlg-opt/ex_storage_service/blob/v0.7.1/lib/ex_storage_service_sdk/transport.ex#L1)

HTTP transport contract used by `ExStorageServiceSdk.S3.Client`.

The default, `ExStorageServiceSdk.Transport.HTTPFetch`, is built on `http_fetch`.
A replacement must return `ExStorageServiceSdk.S3.Response` structs whose `:body`
is either a binary or a stream process consumed through `c:consume/4`, and must
report failures as `{:error, %ExStorageServiceSdk.Error{category: :transport}}`.

# `close`

```elixir
@callback close(response :: ExStorageServiceSdk.S3.Response.t()) :: :ok
```

# `consume`

```elixir
@callback consume(
  response :: ExStorageServiceSdk.S3.Response.t(),
  acc :: term(),
  reducer :: (binary(), term() -&gt;
                {:ok, term()} | {:error, ExStorageServiceSdk.Error.t()}),
  opts :: keyword()
) :: {:ok, term(), map()} | {:error, ExStorageServiceSdk.Error.t()}
```

# `request`

```elixir
@callback request(
  url :: String.t(),
  request :: ExStorageServiceSdk.S3.Request.t(),
  opts :: keyword()
) ::
  {:ok, ExStorageServiceSdk.S3.Response.t()}
  | {:error, ExStorageServiceSdk.Error.t()}
```

---

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