# `BB.Dsl.CommandTransformer`
[🔗](https://github.com/beam-bots/bb/blob/main/lib/bb/dsl/command_transformer.ex#L5)

Generates convenience functions for commands on the robot module.

For each command defined in the DSL, this transformer generates a function
on the robot module that calls `BB.Robot.Runtime.execute/3`.

## Example

Given a command definition:

    commands do
      command :navigate_to_pose do
        handler NavigateToPoseHandler
        argument :target_pose, BB.Pose, required: true
        argument :tolerance, :float, default: 0.1
      end
    end

This transformer generates:

    @spec navigate_to_pose(keyword()) :: {:ok, pid()} | {:error, term()}
    def navigate_to_pose(goal \\ []) do
      BB.Robot.Runtime.execute(__MODULE__, :navigate_to_pose, Map.new(goal))
    end

The caller can then await the command to get the result:

    {:ok, cmd} = MyRobot.navigate_to_pose(target_pose: pose)
    {:ok, result} = BB.Command.await(cmd)

# `after_compile?`

---

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