defmodule A2S.DynamicSupervisor do
@moduledoc """
Singleton dynamic supervisor for `A2S.Statem` processes.
"""
use DynamicSupervisor
## API
@spec start_link(any) :: :ignore | {:error, any} | {:ok, pid}
def start_link(_arg) do
DynamicSupervisor.start_link(__MODULE__, [], name: __MODULE__)
end
@doc """
Starts an `A2S.Statem` for the specified `address`.
"""
@spec start_child({:inet.ip_address, :inet.port_number}) :: :ignore | {:error, any} | {:ok, pid} | {:ok, pid, any}
def start_child(address) do
DynamicSupervisor.start_child(__MODULE__, {A2S.Statem, address})
end
## Callbacks
@impl true
def init(_arg) do
DynamicSupervisor.init(strategy: :one_for_one)
end
end