Current section

Files

Jump to
gaffer src gaffer_worker.erl
Raw

src/gaffer_worker.erl

-module(gaffer_worker).
-moduledoc "Worker behaviour for gaffer job queues.".
-export([perform/2]).
-export_type([worker/0, result/0]).
-doc "The result of executing a job.".
-type result() ::
complete
| {complete, term()}
| {fail, term()}
| {cancel, binary()}
| {schedule, gaffer:timestamp()}.
-doc "A worker is either a callback module or a fun.".
-type worker() :: module() | fun((gaffer:job()) -> result()).
-doc "Executes a `t:gaffer:job/0`.".
-callback perform(Job :: gaffer:job()) -> result().
%--- API -----------------------------------------------------------------------
-doc false.
-spec perform(worker(), gaffer:job()) -> result().
perform(Worker, Job) when is_function(Worker, 1) -> Worker(Job);
perform(Mod, Job) when is_atom(Mod) -> Mod:perform(Job).