lib/a2s/supervisor.ex

defmodule A2S.Supervisor 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