lib/lapin/connection/supervisor.ex

defmodule Lapin.Connection.Supervisor do
  @moduledoc """
  Lapin Connections Supervisor
  """
  use Supervisor
  require Logger

  @spec start_link(configuration :: Lapin.config()) :: Supervisor.on_start()
  def start_link(configuration) do
    Supervisor.start_link(__MODULE__, configuration, name: __MODULE__)
  end

  def init(configuration) do
    configuration
    |> Enum.map(fn connection ->
      module = Keyword.get(connection, :module)
      %{id: module, start: {Lapin.Connection, :start_link, [connection, [name: module]]}}
    end)
    |> Supervisor.init(strategy: :one_for_one)
  end
end