# not preferable
def create_oder(user_id, item_id) do
with {:ok, user} <- User.find(user_id),
{:ok, item} <- Item.find(item_id) do
# ...
else
{:error, :not_found} ->
# What's not found, user or item ?
end
end
# preferable
def create_oder(user_id, item_id) do
with {:ok, user} <- User.find(user_id),
{:ok, item} <- Item.find(item_id) do
# ...
else
{:error, {:users, :not_found}} ->
# ...
{:error, {:items, :not_found}} ->
# ...
end
end
# preferable (specially if you have bang version `create_user!` that raises exception)
def create_oder(user_id, item_id) do
with {:ok, user} <- User.find(user_id),
{:ok, item} <- Item.find(item_id) do
# ...
else
{:error, %UserNotFoundError{}} ->
# ...
{:error, %ItemNotFoundError{}}} ->
# ...
end
end