21 lines
606 B
Elixir
21 lines
606 B
Elixir
defmodule Reactor.Req.Builder do
|
|
@moduledoc "Common builder for all DSL entities"
|
|
import Reactor.Template, only: :macros
|
|
alias Reactor.{Argument, Builder, Req.Step}
|
|
|
|
@doc false
|
|
|
|
def build(req, fun, reactor) do
|
|
arguments =
|
|
req
|
|
|> Map.from_struct()
|
|
|> Map.drop([:__identifier__, :arguments, :name])
|
|
|> Enum.reject(&is_nil(elem(&1, 1)))
|
|
|> Enum.map(fn
|
|
{name, template} when is_template(template) ->
|
|
%Argument{name: name, source: template}
|
|
end)
|
|
|
|
Builder.add_step(reactor, req.name, {Step, fun: fun}, arguments, ref: :step_name)
|
|
end
|
|
end
|