defmodule LoggerTelegramBackend.HTTPClient.Hackney do
@moduledoc """
The built-in HTTP client based on [hackney](https://github.com/benoitc/hackney).
This client implements the `LoggerTelegramBackend.HTTPClient` behaviour.
See `LoggerTelegramBackend` for the available configuration options and
`LoggerTelegramBackend.HTTPClient` if you wish to use another HTTP client.
"""
alias LoggerTelegramBackend.Config
@behaviour LoggerTelegramBackend.HTTPClient
@hackney_pool_name :logger_telegram_backend_pool
@impl true
def child_spec do
opts = Config.client_pool_opts()
:hackney_pool.child_spec(@hackney_pool_name, opts)
end
@impl true
def request(method, url, headers, body) do
opts =
Config.client_request_opts()
|> Keyword.put_new(:pool, @hackney_pool_name)
|> Enum.concat([:with_body])
case :hackney.request(method, url, headers, body, opts) do
{:ok, _status, _headers, _body} = result -> result
{:error, _reason} = error -> error
end
end
end