22 lines
606 B
Elixir
22 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
|