Current section
Files
Jump to
Current section
Files
lib/cafex/consumer.ex
defmodule Cafex.Consumer do
@moduledoc """
Consumer worker implementation specification.
## Callbacks
* `init(args)`
* `consume(message, state)`
* `terminate(state)`
"""
@type state :: term
@type done :: :ok | :nocommit
@callback init(args :: term) :: {:ok, state} | {:error, reason :: term}
@callback consume(message :: Cafex.Protocol.Message.t, state) :: {done, state} | {:pause, timeout}
@callback terminate(state) :: :ok
@doc false
defmacro __using__(_) do
quote do
@behaviour unquote(__MODULE__)
def init(args), do: {:ok, args}
def consume(_msg, state), do: {:ok, state}
def terminate(_state), do: :ok
defoverridable [init: 1, consume: 2, terminate: 1]
end
end
end