Skip to content

Commit 5d1b1a0

Browse files
committed
Exit early on failure
1 parent c8628a0 commit 5d1b1a0

1 file changed

Lines changed: 29 additions & 11 deletions

File tree

lib/phoenix_container_example/autoscaling.ex

Lines changed: 29 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -32,12 +32,20 @@ defmodule PhoenixContainerExample.Autoscaling do
3232
def trigger_event(event_name, opts \\ []) do
3333
Logger.debug("event: #{event_name}")
3434

35-
with {:ok, events} <- lookup_event(event_name, opts),
36-
event = events,
37-
aws_data = map_keys(event),
38-
{:ok, data} <- rate_limit(aws_data, opts) do
39-
:ok = aws_request(request_data)
40-
:ok
35+
case lookup_event(event_name, opts) do
36+
{:ok, events} ->
37+
Enum.reduce_while(events, :ok, fn event, acc ->
38+
case acc do
39+
:ok ->
40+
process_event(event, opts)
41+
42+
error ->
43+
{:halt, error}
44+
end
45+
end)
46+
47+
{:error, :unknown_event} ->
48+
{:error, :unknown_event}
4149
end
4250
end
4351

@@ -55,13 +63,23 @@ defmodule PhoenixContainerExample.Autoscaling do
5563
end
5664
end
5765

66+
@spec process_event(map(), keyword()) :: :ok | {:error, :rate_limit | term()}
67+
def process_event(event, opts) do
68+
with {:ok, aws_data} <- map_keys(event),
69+
{:ok, data} <- rate_limit(aws_data, opts),
70+
do: aws_request(data)
71+
end
72+
5873
# Convert Elixir-style keys in the config to PascalCase format AWS expects.
59-
@spec map_keys(map()) :: map()
74+
@spec map_keys(map()) :: {:ok, map()}
6075
defp map_keys(data) do
61-
for {key, value} <- data, into: %{} do
62-
camel_key = key |> to_string() |> Macro.camelize()
63-
{camel_key, value}
64-
end
76+
result =
77+
for {key, value} <- data, into: %{} do
78+
camel_key = key |> to_string() |> Macro.camelize()
79+
{camel_key, value}
80+
end
81+
82+
{:ok, result}
6583
end
6684

6785
@spec rate_limit(map(), keyword()) :: {:ok, map()} | {:error, :rate_limit}

0 commit comments

Comments
 (0)