defmodule Mixpanel.Supervisor do @moduledoc false use DynamicSupervisor @spec start_link() :: Supervisor.on_start() def start_link(), do: DynamicSupervisor.start_link(__MODULE__, [], name: __MODULE__) @spec start_link(any) :: Supervisor.on_start() def start_link(_), do: start_link() @spec start_child(Mixpanel.Config.options()) :: DynamicSupervisor.on_start_child() def start_child(config), do: DynamicSupervisor.start_child(__MODULE__, {Mixpanel.Client, config}) @doc export: true @spec terminate_child(Mixpanel.Config.name()) :: :ok | {:error, :not_found} def terminate_child(client) do case Process.whereis(client) do pid when is_pid(pid) -> DynamicSupervisor.terminate_child(__MODULE__, pid) _ -> {:error, :not_found} end end @spec init(any) :: {:ok, DynamicSupervisor.sup_flags()} def init(_) do DynamicSupervisor.init(strategy: :one_for_one) end end