@type json() :: %{name: String.t(), description: String.t(), required: boolean()}
@type t() :: %Phantom.Prompt.Argument{ description: String.t(), name: String.t(), required: boolean() }
@spec build(map() | Keyword.t()) :: t()
@spec to_json(t()) :: json()