lib/io/ansi/table/spec_sup.ex

defmodule IO.ANSI.Table.SpecSup do
  use Supervisor

  alias __MODULE__
  alias IO.ANSI.Table.{DynSpecSup, SpecRecovery}

  @spec start_link(term) :: Supervisor.on_start()
  def start_link(:ok), do: Supervisor.start_link(SpecSup, :ok, name: SpecSup)

  ## Callbacks

  @spec init(term) ::
          {:ok, {:supervisor.sup_flags(), [:supervisor.child_spec()]}} | :ignore
  def init(:ok) do
    [
      # Child spec relying on `use DynamicSupervisor`...
      {DynSpecSup, :ok},
      # Child spec relying on `use GenServer`...
      {SpecRecovery, :ok}
    ]
    |> Supervisor.init(strategy: :rest_for_one)
  end
end