Packages
reactor
1.0.2
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/wait_for.ex
# SPDX-FileCopyrightText: 2023 James Harton, Zach Daniel, Alembic Pty and contributors
# SPDX-FileCopyrightText: 2023 reactor contributors <https://github.com/ash-project/reactor/graphs/contributors>
#
# SPDX-License-Identifier: MIT
defmodule Reactor.Dsl.WaitFor do
@moduledoc """
The struct used to store `wait_for` DSL entities.
See `d:Reactor.step.wait_for`.
"""
defstruct __identifier__: nil, description: nil, names: [], __spark_metadata__: nil
alias Reactor.{Argument, Dsl}
import Reactor.Utils
@type t :: %Dsl.WaitFor{
names: [atom],
__identifier__: any,
__spark_metadata__: Spark.Dsl.Entity.spark_meta()
}
@doc false
def __entity__,
do: %Spark.Dsl.Entity{
name: :wait_for,
describe: """
Wait for the named step to complete before allowing this one to start.
Desugars to `argument :_, result(step_to_wait_for)`
""",
examples: ["wait_for :create_user"],
args: [:names],
target: Dsl.WaitFor,
schema: [
names: [
type: {:wrap_list, :atom},
required: true,
doc: """
The name of the step to wait for.
"""
],
description: [
type: :string,
required: false,
doc: """
An optional description.
"""
]
]
}
defimpl Argument.Build do
def build(wait_for) do
wait_for
|> Map.get(:names, [])
|> map_while_ok(fn name ->
{:ok, Argument.from_result(:_, name)}
end)
end
end
end