Hi! with is the right tool when you want this kind of error handling in these function pipelines :)
Cheers, Louis On 15 Aug 2016 12:12, "Alvise Susmel" <alv...@poeticoding.com> wrote: > Hi, > > I've started thinking about this, as maybe many of you, when I needed to > stop the pipe when an error is returned. I've seen that there are different > conversation about this, but I haven't clear what is the *elixir way* to > handle errors using pipes. > > I see two ways for achieving the same result.* The first* is to use the > *pipe* *|>* and for each function catch the error and propagate it down. > The error has to be always returned with the same pattern, like {:error, > reason} > > connect > |> receive_image > |> resize > |> rotate > |> save > > > If *receive_image* returns an error, *resize* needs to handle it > > def resize({:error, _}=error), do:error > > and to propagate it down through the pipe. So *rotate* needs to do the > same, etc.. > > *The* *second* way I see is using the *with*, which to me seems to be > more generic (and less clean) > > with {:ok, pid} <- connect, > {:ok, image} <- receive_image(pid), > {:ok, resized_image} <- resize(image), > {:ok, rotated_image} <- rotate(resized_image), > :ok <- save(rotated_image) > do: IO.puts "saved" > > > Now, the cool thing about *with* is that when one of the assignments > fails, it exits returning the value that failed the pattern match. > > So, to you, what is the elixir way on handling the return errors on pipes > ? Could *"with" *be seen as a new (and more generic) way of piping with > error handling ? > > Thanks > > Alvise > > -- > You received this message because you are subscribed to the Google Groups > "elixir-lang-core" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to elixir-lang-core+unsubscr...@googlegroups.com. > To view this discussion on the web visit https://groups.google.com/d/ > msgid/elixir-lang-core/1dc86df2-eca0-4fa5-b883- > 7b9c2df36444%40googlegroups.com > <https://groups.google.com/d/msgid/elixir-lang-core/1dc86df2-eca0-4fa5-b883-7b9c2df36444%40googlegroups.com?utm_medium=email&utm_source=footer> > . > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "elixir-lang-core" group. To unsubscribe from this group and stop receiving emails from it, send an email to elixir-lang-core+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/elixir-lang-core/CAM-pwt4N2w6sqUOkemo-q--FrZKcrvNBPYMpBMb4A9O2qOWOhQ%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.