documentation/topics/flows.md



      Available template functions:

      - `arg/1` to refer to a flow argument
      - `result/1` to refer to the result of another step


    If given a single step, then the result of the step is returned. If given multiple, then a map of step name to result is returned.
    If nothing is provided, then the last step is returned.

    To rename keys in the map of step names to results, use a keyword list, where the key is the step and the value is what should be in
    the returned map.

    For example:

    `returns :step_name`
    `returns [:step_one, :step_two]`
    `returns [step_one: :one, step_two: :two]`


## Custom steps

        Generally speaking, you should also set the `touches_resources` if you set `async?` to true.
        This ensures that the custom step will be run synchronously if any of those resource's data
        layers is in a corresponding transaction. You don't necessarily need to set *all* of the
        resources that will be touched. For example, all AshPostgres resources that share the same
        repo share the same transaction state.