reason :: term
return_values :: {:ok, state} | {:ok, state, timeout | :hibernate} | :ignore | {:stop, reason}
state :: term