19 lines
444 B
Elixir
19 lines
444 B
Elixir
defmodule Init do
|
|
@moduledoc """
|
|
Run a function synchronously as part of a `Supervisor`
|
|
"""
|
|
use GenServer, restart: :transient
|
|
|
|
def start_link(arg, opts \\ []) do
|
|
GenServer.start_link(__MODULE__, mfa!(arg), opts)
|
|
end
|
|
|
|
@impl true
|
|
def init({mod, fun, args}) do
|
|
apply(mod, fun, args)
|
|
:ignore
|
|
end
|
|
|
|
defp mfa!({_m, _f, _a} = mfa), do: mfa
|
|
defp mfa!(fun) when is_function(fun, 0), do: {Kernel, :apply, [fun, []]}
|
|
end
|