mirror of
https://github.com/jbranchaud/til
synced 2026-01-03 07:08:01 +00:00
971 B
971 B
When Things Don't Match The With Statements
You set up a series of match statements in a with construct as a way of
avoiding a bunch of nested if statements. Inevitably you will be passing
data through that doesn't meet all of the match criteria. By default, the
with construct will short circuit and your program will continue from
there.
You can, however, take more control over how you handle the failure cases
by employing an else block. The else block works a lot like a case
statement.
with %{status_code: 200, body: body} <- HTTPoison.get!(url),
{:ok, decoded_body} <- Poison.decode(body) do
{:ok, decoded_body}
else
%{status_code: 401} ->
reauthenticate()
_ ->
log_error()
end
Here we are able to anticipate a failure case and respond accordingly. For everything else, we have a generic action that we take.
See the docs for
with for more
details.