# `Snodo.Prompt.Simple`
[🔗](https://github.com/joshrotenberg/snodo/blob/v0.1.0/lib/snodo/prompt/simple.ex#L1)

`Snodo.Prompt` with declared arguments and plain return values from `render/2`.

Arguments are declared one per line instead of as a list of maps:

    defmodule Review do
      use Snodo.Prompt.Simple, name: "review", description: "Review a package"

      argument "name", required: true, description: "Package name on hex.pm"
      argument "focus", description: "quality, security, or upgrade"

      @impl true
      def render(%{"name" => name} = arguments, _context) do
        {:ok, "Review #{name}, focusing on #{arguments["focus"] || "quality"}."}
      end
    end

`argument/2` accepts `:required`, `:description`, and `:title`. The module
accepts every other `Snodo.Prompt` option (`:name`, `:title`, `:description`,
`:completion_arguments`, `:icons`, `:metadata`) and its definition is
validated at compile time by the same checks `use Snodo.Prompt` runs.

`render/2` may return:

  * `{:ok, text}` with a binary: one user message containing that text.
  * `{:ok, message}` or `{:ok, [message]}`: messages built with
    `Snodo.Prompt.message/2`, validated by the router as usual.
  * `{:ok, %Snodo.Result{}}` and `{:error, reason}`, unchanged. Use
    `Snodo.Result.prompt_get/2` for a description or metadata and
    `Snodo.Result.input_required/1` for MRTR.

# `argument`
*macro* 

Declares one prompt argument. Arguments are listed in declaration order.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
