backin

backin

I’m fighting with this code

  @moduledoc false
  require Logger

  def send_event_to_eventbridge() do
    event = %{
      entries: [
        %{
          source: "car-event",
          detailType: "car-created",
          detail: (%{
            brand: "Renault",
            name: "A4",
            country: "US"
          }),
          eventBusName: "my-event-bus"
        }
      ]
    }

    event_json = Poison.encode(event)

    Logger.info("Sending: #{inspect(event_json)}")
    
    case ExAws.EventBridge.put_events(event_json) |> ExAws.request() do
      {:ok, response} ->
        Logger.info("Successfully: #{inspect(response)}")
      {:error, error} ->
        Logger.error("Error: #{inspect(error)}")
    end
  end
end

and I don’t know how to fix this error

(Protocol.UndefinedError) protocol Enumerable not implemented for {:ok, “{"entries":[{"eventBusName":"my-event-bus","detail":{"country":"US","brand":"Renault","name":"A4"},"detailType":"car-created","source":"car-event"}]}”} of type Tuple. This protocol is implemented for the following type(s): DBConnection.PrepareStream, DBConnection.Stream, Date.Range, Ecto.Adapters.SQL.Stream, File.Stream, Function, GenEvent.Stream, HashDict, HashSet, IO.Stream, Jason.OrderedObject, List, Map, MapSet, Phoenix.LiveView.LiveStream, Postgrex.Stream, Range, Stream
(elixir 1.14.0) lib/enum.ex:1: Enumerable.impl_for!/1
(elixir 1.14.0) lib/enum.ex:166: Enumerable.reduce/3
(elixir 1.14.0) lib/enum.ex:4307: Enum.map/2
(ex_aws_eventbridge 0.1.1) lib/ex_aws/event_bridge.ex:88: ExAws.EventBridge.put_events/2
(my_app 0.1.0) lib/my_app/eventbridge.ex:27: MyApp.Eventbridge.send_event_to_eventbridge/0

Showing Posts 1 to 2

msmithstubbs

msmithstubbs

This error message:

(Protocol.UndefinedError) protocol Enumerable not implemented for {:ok, “{"entries":[{"eventBusName":"my-event-bus","detail":{"country":"US","brand":"Renault","name":"A4"},"detailType":"car-created","source":"car-event"}]}”} of type Tuple. 

is telling you “I’m calling an Enumerable function on something, but it doesn’t support it because it is a tuple”

Where is the tuple coming from? Here:

  event_json = Poison.encode(event)`

Poison.encode returns a tuple. If you just want the encoded JSON, you can call Poison.encode!

iex> Poison.encode([1, 2, 3])
{:ok, "[1,2,3]"}

iex> Poison.encode!([1, 2, 3])
"[1,2,3]"
backin

backin OP

I was able to get it now, I’ll leave it here for other users.

defmodule MyApp.EventBridge do
  @moduledoc false
  require Logger
  alias ExAws.EventBridge

  def send_event_to_eventbridge(source, detail_type, detail, event_bus_name) do
    event = %{
      "Source": source,
      "DetailType": detail_type,
      "Detail":  Poison.encode!(detail),
      "EventBusName": event_bus_name
    }

    Logger.info("Sending: #{inspect(event)}" )

    case EventBridge.put_events([event]) |> ExAws.request() do
      {:ok, response} ->
        Logger.info("Event ID: #{inspect(response)}")

      {:error, error} ->
        Logger.error("Error #{inspect(error)}")
    end
  end
end

I insert the data through the console

MyApp.EventBridge.send_event_to_eventbridge(
   "car-event",
   "car-created",
   %{brand: "Renault", name: "A4", country: "US"},
   "my-event-bus"
  )

[info] Sending: %{Source: "car-event", DetailType: "car-created", Detail: "{\"country\":\"US\",\"brand\":\"Renault\",\"name\":\"A4\"}", EventBusName: "my-event-bus"}

[info] Event ID: %{"Entries" => [%{"EventId" => "e4accabf-b89d-0dd2-0fff-92e6de215a95"}], "FailedEntryCount" => 0}

— All posts loaded —

Where Next? Top

Trending in Questions Top

RSP87
I’m working on a project that simulates the bumbl example in the programming phoenix book. It acts almost like an email client. We have a...
New
kpanic
Hi everyone, I am toying with the idea of building a “match maker” for giving personal help to people that wants to start coding. I sta...
New
nseaSeb
Hello, I know there is an approach for handling lists that allows for optimized traversal, but I can’t recall the specific method (somet...
New
brecabral
Documentation While reading the Scoped Routes section, I noticed that the documentation currently refers to a problem without explainin...
New
velrest
So my question is quite simple and i have found no conclusive answer on forum, google or AI. Should we use :erlang.float for Integer to ...
New
asweet-confluent
I recently noticed that Elixir’s Logger defaults its primary log level to :debug when no :logger, :level application configuration is pre...
New
apz
I’m new to elixir and just tried to install the elixirLS extension for VScode(ium) and it is throwing some errors that I would like help ...
New

Other Trending Topics Top

GenericJam
Edit: 2026 May 15 - This post is archived. Mob is alive!! Main docs: mob v0.7.11 — Documentation A bit of explanation for the slightly c...
New
JesseHerrick
Hey, I’m Jesse and I’m the main contributor behind Dexter, a full-featured, lightning-fast Elixir LSP optimized for large codebases. It s...
New
mudasobwa
I am happy to introduce the very α version of the new programming language compiled to BEAM. Welcome Cure. It has literally three kille...
New
marciok
Hi there! We created Gust: A task orchestrator inspired by Airflow. For those who have never heard about Aiflow, it’s a Python-based wor...
New
mhanberg
Hi everyone! The first release candidate for the Expert language server project is now available! We’ve published a press release detai...
New
jimsynz
Beam Bots (or just BB for short) is a framework for building fault-tolerant robotics applications in Elixir using familiar OTP patterns. ...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews