Current section
Files
Jump to
Current section
Files
lib/telegram_logger_backend/sender.ex
defmodule LoggerTelegramBackend.Sender do
@moduledoc """
Specifies the API for using a custom Sender.
"""
@doc """
Creates a custom Tesla.Client
"""
@callback client(opts :: Keyword.t()) :: Tesla.Client.t()
@doc """
Sends a message
"""
@callback send_message(
tesla_client :: Tesla.Client.t(),
message :: String.t(),
opts :: Keyword.t()
) :: :ok | {:error, any}
defmacro __using__(opts) do
quote do
@behaviour LoggerTelegramBackend.Sender
@adapter {Tesla.Adapter.Hackney, pool: :logger_telegram_backend}
@impl true
def client(opts \\ []) do
{adapter, opts} = Keyword.pop(opts, :adapter, @adapter)
{base_url, opts} = Keyword.pop(opts, :base_url, unquote(Keyword.fetch!(opts, :base_url)))
middlewares = [
{Tesla.Middleware.BaseUrl, base_url},
{Tesla.Middleware.Headers, [{"user-agent", ""}]},
{Tesla.Middleware.Opts, opts}
| unquote(opts[:middlewares] || [])
]
Tesla.client(middlewares, adapter)
end
defoverridable client: 1
end
end
end