 
   # returns the commander name for the given controller (assigned in socket)
   @doc false
+  @spec get_commander(Phoenix.Socket.t()) :: atom
   def get_commander(socket) do
     controller = socket.assigns.__controller
     controller.__drab__()[:commander]

  end

  @doc false
  def detokenize(socket, token, salt \\ "drab token") do
    case Phoenix.Token.verify(socket, salt, token, max_age: 86_400) do
      {:ok, detokenized} ->


  # returns the controller name used with the socket
  @doc false
  @spec get_controller(Phoenix.Socket.t()) :: atom
  def get_controller(socket) do
    socket.assigns.__controller
  end

  # returns the view name used with the socket
  @doc false
  @spec get_view(Phoenix.Socket.t()) :: atom
  def get_view(socket) do
    controller = socket.assigns.__controller
    controller.__drab__()[:view]
