Elixir Supervisor default child_spec
When using Supervisor
elixir already declares a child_spec/1
for us with the right type: :supervisor
. The generated code will be something like:
defmodule MyApp.MySupervisor do
use Supervisor, opts
...
def child_spec(init_arg) do
default = %{
id: __MODULE__,
start: {__MODULE__, :start_link, [init_arg]},
type: :supervisor
}
Supervisor.child_spec(default, unquote(Macro.escape(opts)))
end
end
Keep in mind that's a pseudo-code as I left the Macro.escape
for better understanding of the "expanded" code that happens on the __using__/1
function.
I tried to get this info from the docs, which I could not find that easily so I dig into the code, and as a good surprise this was so easy to find. Check this out.
By the way, the generated code is very similar to the GenServer
one for the same function, the only difference is that on the GenServer
there's no :type
key, and it works fine because the default value for the :type
key is :worker
.