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.