Current section
Files
Jump to
Current section
Files
lib/retort/amqp.ex
defmodule Retort.AMQP do
@moduledoc """
Wrap `AMQP.*` modules so only functions needed for `Retort.Channel` are exposed, so it can be swapped
during tests of error handling
"""
# Types
@typedoc """
The name of a RabbitMQ queue
"""
@type queue :: String.t
# Callbacks
@callback consume(%AMQP.Channel{}, queue) :: {:ok, term}
@callback declare_queue(%AMQP.Channel{}, queue) ::
{:ok, %{queue: Retort.AMQP.queue, message_count: non_neg_integer, consumer_count: non_neg_integer}}
@callback open(%AMQP.Connection{}) :: {:ok, %AMQP.Channel{}}
@callback prefetch_count(%AMQP.Channel{}, non_neg_integer) :: :ok
# Macros
defmacro __using__([]) do
quote do
alias Retort.AMQP.Default
@behaviour Retort.AMQP
@spec consume(%AMQP.Channel{}, String.t) :: {:ok, String.t}
def consume(channel, queue), do: Default.consume(channel, queue)
@spec declare_queue(%AMQP.Channel{}, Retort.AMQP.queue) ::
{:ok, %{queue: Retort.AMQP.queue, message_count: non_neg_integer, consumer_count: non_neg_integer}}
def declare_queue(channel, queue), do: Default.declare_queue(channel, queue)
@spec open(%AMQP.Connection{}) :: {:ok, %AMQP.Channel{}}
def open(connection), do: Default.open(connection)
@spec prefetch_count(%AMQP.Channel{}, non_neg_integer) :: :ok
def prefetch_count(channel, prefetch_count), do: Default.prefetch_count(channel, prefetch_count)
defoverridable [consume: 2, declare_queue: 2, open: 1, prefetch_count: 2]
end
end
end