Packages
finitomata
0.24.2
0.41.0
0.40.0
0.35.0
0.34.0
0.33.0
0.32.0
0.31.1
0.30.3
0.30.2
0.30.1
0.30.0
0.29.10
0.29.9
0.29.8
0.29.7
0.29.6
0.29.5
0.29.4
0.29.3
0.29.2
0.29.1
0.29.0
0.28.1
0.28.0
0.27.1
0.27.0
0.26.4
0.26.3
0.26.2
0.26.1
0.26.0
0.25.0
0.24.4
0.24.3
0.24.2
0.24.1
0.24.0
0.23.7
0.23.6
0.23.5
0.23.4
0.23.3
0.23.2
0.23.1
0.23.0
0.22.1
0.22.0
0.21.4
0.21.3
0.21.2
0.21.1
0.21.0
0.20.2
0.20.1
0.20.0
0.19.6
0.19.5
0.19.4
0.19.3
0.19.2
0.19.1
0.19.0
0.18.4
0.18.3
0.18.2
0.18.1
0.18.0
0.17.1
0.17.0
0.16.0
0.15.1
0.15.0
0.14.6
0.14.5
0.14.4
0.14.3
0.14.2
0.14.1
0.14.0
0.13.0
0.12.1
0.12.0
0.11.3
0.11.2
0.11.1
0.11.0
0.10.0
0.9.1
0.9.0
0.8.2
0.8.1
0.8.0
0.7.2
0.7.1
0.7.0
0.6.3
0.6.2
0.6.1
0.6.0
0.5.2
0.5.1
0.5.0
0.4.0
0.3.0
0.2.0
0.1.1
0.1.0
The FSM implementation generated from PlantUML textual representation.
Current section
Files
Jump to
Current section
Files
lib/finitomata/pool/actor.ex
defmodule Finitomata.Pool.Actor do
@moduledoc """
The behaviour specifying the actor in the pool.
"""
alias Finitomata.{Pool, Pool.Actor, State}
@doc """
The function which would be invoked in `Finitomata.Pool.run/3`,
see `t:Finitomata.Pool.responsive_actor/0`
"""
@callback actor(term(), State.payload()) :: {:ok, term()} | {:error, any()}
@doc """
The function which would be invoked in `Finitomata.Pool.run/3`
after `actor/2` returned successfully with a result of invocation
and the state of the `Pool` worker,
see `t:Finitomata.Pool.naive_handler/0`.
The value returned from this call will be send as an last argument
of the message to the caller of `Finitomata.Pool.run/3` if the `pid`
was passed.
"""
@callback on_result(result :: term(), id :: Pool.id()) :: any()
@doc """
The function which would be invoked in `Finitomata.Pool.run/3`
after `actor/2` failed with a failure message and the state
of the `Pool` worker,
see `t:Finitomata.Pool.naive_handler/0`.
The value returned from this call will be send as an last argument
of the message to the caller of `Finitomata.Pool.run/3` if the `pid`
was passed.
"""
@callback on_error(error :: term(), id :: Pool.id()) :: any()
@optional_callbacks on_result: 2, on_error: 2
@doc """
`StreamData` helper to produce `on_error/2` and `on_result/2` handlers
"""
def handler, do: handler(:result)
def handler(:error), do: do_handler(error: true)
def handler(:result), do: do_handler(error: false)
def handler(f) when is_function(f, 2), do: do_handler(handler: f)
defp do_handler(options) when is_list(options) do
default = fn ->
if Keyword.get(options, :error, false),
do: &Actor.error_logger/2,
else: &Actor.result_logger/2
end
handler = Keyword.get_lazy(options, :handler, default)
StreamData.constant(handler)
end
@doc false
def result_logger(result, id) do
require Logger
Logger.info("[👷] Pool worker: ‹#{inspect(id)}› succeeded: ‹#{inspect(result)}›")
end
@doc false
def error_logger(error, id) do
require Logger
Logger.warning("[👷] Pool worker: ‹#{inspect(id)}› errored: ‹#{inspect(error)}›")
end
end