Packages
reactor
0.15.3
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/middleware.ex
defmodule Reactor.Dsl.Middleware do
@moduledoc """
The `middleware` DSL entity struct.
See `d:Reactor.middleware.middleware`.
"""
alias Reactor.{Dsl.Build, Middleware}
defstruct __identifier__: nil, description: nil, module: nil
@type t :: %__MODULE__{
__identifier__: any,
description: nil | String.t(),
module: Middleware.t()
}
@doc false
def __entity__,
do: %Spark.Dsl.Entity{
name: :middleware,
describe: "Name a middleware to be added to the Reactor.",
target: __MODULE__,
args: [:module],
identifier: :module,
modules: [:module],
schema: [
module: [
type: {:behaviour, Middleware},
required: true,
doc: """
The middleware to be added to the Reactor.
"""
],
description: [
type: :string,
required: false,
doc: """
An optional description for the middleware.
"""
]
]
}
defimpl Build do
alias Reactor.Builder
alias Spark.{Dsl.Extension, Error.DslError}
def build(middleware, reactor) do
Builder.add_middleware(reactor, middleware.module)
end
def verify(middleware, dsl_state) do
cond do
function_exported?(middleware.module, :get_process_context, 0) &&
!function_exported?(middleware.module, :set_process_context, 1) ->
{:error,
%DslError{
module: Extension.get_persisted(dsl_state, :module),
path: [:reactor, :middlewares, :middleware],
message: """
When `get_process_context/0` is defined you must also defined `set_process_context/1`.
"""
}}
function_exported?(middleware.module, :set_process_context, 1) &&
!function_exported?(middleware.module, :get_process_context, 0) ->
{:error,
%DslError{
module: Extension.get_persisted(dsl_state, :module),
path: [:reactor, :middlewares, :middleware],
message: """
When `set_process_context/1` is defined you must also defined `get_process_context/0`.
"""
}}
true ->
:ok
end
end
def transform(_, dsl_state), do: {:ok, dsl_state}
end
end