Packages
reactor
0.8.4
1.0.2
1.0.1
1.0.0
0.17.0
0.16.0
0.15.6
0.15.5
0.15.4
0.15.3
0.15.2
0.15.1
0.15.0
0.14.0
0.13.3
0.13.2
0.13.1
0.13.0
0.12.1
0.12.0
0.11.0
0.10.3
0.10.2
0.10.1
0.10.0
0.9.1
0.9.0
0.8.5
0.8.4
0.8.3
0.8.2
0.8.1
0.8.0
0.7.0
0.6.0
0.5.2
0.5.1
0.5.0
0.4.1
0.4.0
0.3.5
0.3.4
0.3.3
0.3.2
0.3.1
0.3.0
0.2.4
0.2.3
0.2.2
0.2.1
0.2.0
0.1.0
An asynchronous, graph-based execution engine
Current section
Files
Jump to
Current section
Files
lib/reactor/dsl/compose.ex
defmodule Reactor.Dsl.Compose do
@moduledoc """
The `compose` DSL entity struct.
See the `d:Reactor.compose`.
"""
defstruct __identifier__: nil, arguments: [], name: nil, reactor: nil
alias Reactor.{Builder, Dsl}
@type t :: %Dsl.Compose{
__identifier__: any,
arguments: [Dsl.Argument.t()],
name: any,
reactor: module | Reactor.t()
}
@doc false
def __entity__,
do: %Spark.Dsl.Entity{
name: :compose,
describe: """
Compose another Reactor into this one.
Allows place another Reactor into this one as if it were a single step.
""",
args: [:name, :reactor],
target: Dsl.Compose,
identifier: :name,
no_depend_modules: [:reactor],
entities: [arguments: [Dsl.Argument.__entity__(), Dsl.WaitFor.__entity__()]],
recursive_as: :steps,
schema: [
name: [
type: :atom,
required: true,
doc: """
A unique name for the step. Allows the result of the composed reactor to be depended upon by steps in this reactor.
"""
],
reactor: [
type: {:or, [{:struct, Reactor}, {:spark, Reactor.Dsl}]},
required: true,
doc: """
The reactor module or struct to compose upon.
"""
]
]
}
defimpl Dsl.Build do
def build(compose, reactor) do
Builder.compose(reactor, compose.name, compose.reactor, compose.arguments)
end
def transform(_compose, dsl_state), do: {:ok, dsl_state}
def verify(_compose, _dsl_state), do: :ok
end
end