Mayfly.Events.DynamoDB (Mayfly v1.0.0-rc.1)

Copy Markdown View Source

Amazon DynamoDB Streams events.

stream = Mayfly.Events.DynamoDB.decode(event)

for %{event_name: :insert, new_image: item} <- stream.records do
  # item is a plain map: %{"id" => "a1", "price" => 12.5, "tags" => ["x"], ...}
end

DynamoDB's typed attribute values are converted to Elixir terms:

TypeElixir
Sbinary
Ninteger or float
BOOLboolean
NULLnil
Bbinary (base64-decoded)
Llist
Mmap
SS / NS / BSlist of binaries / numbers / binaries

from_attribute_values/1 is public so it can be reused for other DynamoDB JSON (e.g. GetItem responses).

Summary

Functions

Partial batch response for the given sequence numbers.

Decodes a DynamoDB Streams event.

Converts a map of DynamoDB attribute values (%{"id" => %{"S" => "a"}}) into plain terms.

Converts one attribute value.

Runs fun per record, collecting failures by sequence number.

Types

t()

@type t() :: %Mayfly.Events.DynamoDB{
  raw: map(),
  records: [Mayfly.Events.DynamoDB.Record.t()]
}

Functions

batch_failures(sequence_numbers)

@spec batch_failures([String.t()]) :: %{
  batchItemFailures: [%{itemIdentifier: String.t()}]
}

Partial batch response for the given sequence numbers.

decode(e)

@spec decode(map()) :: t()

Decodes a DynamoDB Streams event.

from_attribute_values(map)

@spec from_attribute_values(map() | nil) :: map() | nil

Converts a map of DynamoDB attribute values (%{"id" => %{"S" => "a"}}) into plain terms.

from_av(other)

@spec from_av(map()) :: term()

Converts one attribute value.

process_batch(dynamo_db, fun)

@spec process_batch(t(), (Mayfly.Events.DynamoDB.Record.t() -> term())) :: %{
  batchItemFailures: [%{itemIdentifier: String.t()}]
}

Runs fun per record, collecting failures by sequence number.