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/guard.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.Guard do
@moduledoc """
A Reactor guard.
Guard types should implement the `Reactor.Guard.Build` protocol.
This struct contains a single two arity function, which when called with a
step's arguments and context returns one of the following:
- `:cont` - this guard has passed - continue evaluating any additional guards
and if exhausted run the step.
- `{:halt, result}` - the guard has failed - use `result` as the steps result.
"""
defstruct description: nil, fun: nil
@type t :: %__MODULE__{
description: nil | String.t(),
fun:
(Reactor.inputs(), Reactor.context() -> :cont | {:halt, Reactor.Step.run_result()})
| mfa
}
defimpl Reactor.Guard.Build do
def build(guard), do: {:ok, [guard]}
end
end