View Source Reactor.Dsl.Argument (reactor v0.8.4)
The struct used to store argument
DSL entities.
See Reactor.step.argument
.
Summary
Functions
The input
template helper for the Reactor DSL.
The result
template helper for the Reactor DSL.
The value
template helper for the Reactor DSL.
Types
Functions
@spec input(atom(), [any()]) :: Reactor.Template.Input.t()
The input
template helper for the Reactor DSL.
Example
defmodule ExampleReactor do
use Reactor
input :name
step :greet do
# here: --------↓↓↓↓↓
argument :name, input(:name)
run fn
%{name: nil}, _, _ -> {:ok, "Hello, World!"}
%{name: name}, _, _ -> {:ok, "Hello, #{name}!"}
end
end
end
Extracting nested values
You can provide a list of keys to extract from a data structure, similar to
Kernel.get_in/2
with the condition that the input value is either a struct
or implements the Access
protocol.
@spec result(atom(), [any()]) :: Reactor.Template.Result.t()
The result
template helper for the Reactor DSL.
Example
defmodule ExampleReactor do
use Reactor
step :whom do
run fn ->
{:ok, Enum.random(["Marty", "Doc", "Jennifer", "Lorraine", "George", nil])}
end
end
step :greet do
# here: --------↓↓↓↓↓↓
argument :name, result(:whom)
run fn
%{name: nil}, _, _ -> {:ok, "Hello, World!"}
%{name: name}, _, _ -> {:ok, "Hello, #{name}!"}
end
end
end
Extracting nested values
You can provide a list of keys to extract from a data structure, similar to
Kernel.get_in/2
with the condition that the result is either a struct or
implements the Access
protocol.
@spec value(any()) :: Reactor.Template.Value.t()
The value
template helper for the Reactor DSL.
Example
defmodule ExampleReactor do
use Reactor
input :number
step :times_three do
argument :lhs, input(:number)
# here: -------↓↓↓↓↓
argument :rhs, value(3)
run fn args, _, _ ->
{:ok, args.lhs * args.rhs}
end
end
end