Current section

Files

Jump to
off_broadway_sequin lib acknowledger.ex
Raw

lib/acknowledger.ex

defmodule OffBroadwaySequin.Acknowledger do
@moduledoc false
@behaviour Broadway.Acknowledger
@impl true
def ack({producer_pid, _}, successful, failed) do
{retryable, drop} =
Enum.split_with(failed, fn
%{acknowledger: {_, _ack_ref, ack_data}} -> ack_data.retry
end)
ack_ids =
Enum.map(successful ++ drop, fn
%{acknowledger: {_, _ack_ref, ack_data}} -> ack_data.id
end)
send(producer_pid, {:ack, ack_ids, retryable})
end
@impl true
def configure(_ack_ref, ack_data, options) do
case options do
[retry: value] when is_boolean(value) ->
{:ok, %{ack_data | retry: value}}
_ ->
{:error, "Invalid options, options must be keyword list with `:retry`"}
end
end
end