As it states in the error that is raised, you can either define the child_spec/1 function in your module or you have to pass a child specification as a map:
** (ArgumentError) The module FooBar was given as a child to a supervisor
but it does not implement child_spec/1.
If you own the given module, please define a child_spec/1 function
that receives an argument and returns a child specification as a map.
For example:
def child_spec(opts) do
%{
id: __MODULE__,
start: {__MODULE__, :start_link, [opts]},
type: :worker,
restart: :permanent,
shutdown: 500
}
end
Note that "use Agent", "use GenServer" and so on automatically define
this function for you.
However, if you don't own the given module and it doesn't implement
child_spec/1, instead of passing the module name directly as a supervisor
child, you will have to pass a child specification as a map:
%{
id: FooBar,
start: {FooBar, :start_link, [arg1, arg2]}
}
See the Supervisor documentation for more information