defmodule X3m.Rabbit.Supervisor do use Supervisor alias X3m.Rabbit @moduledoc false def start_link([prefix, bus_settings, configuration]), do: start_link(prefix, bus_settings, configuration) def start_link(prefix, bus_settings, configuration) do prefix = Module.concat(prefix, X3m.Rabbit) name = Module.concat(prefix, Supervisor) Supervisor.start_link(__MODULE__, {prefix, bus_settings, configuration}, name: name) end def init({prefix, bus_settings, configuration}) do connection_name = Module.concat(prefix, Connection) channel_manager = Module.concat(prefix, ChannelManager) consumers_name = Module.concat(prefix, Consumers) children = [ {Rabbit.Connection, [bus_settings, [name: connection_name]]}, {Rabbit.ChannelManager, [connection_name, [name: channel_manager]]}, {Rabbit.Consumers, [channel_manager, configuration, [name: consumers_name]]} ] Supervisor.init(children, strategy: :rest_for_one) end end