Streamline

Streamline provides a custom pipeline operator ~> for working with Elixir pipelines that handle {:ok, _} and {:error, _} tuples seamlessly.

This library enables clean and readable pipelines by:

Motivation

In Elixir, it's common to handle {:ok, _} and {:error, _} tuples using the with construct. While powerful, with can become verbose and less readable for sequential operations. For example:

with {:ok, params} <- build_foo(params),
   {:ok, params} <- build_bar(params) do
  build_baz(params)
end

Streamline simplifies this pattern by allowing the same logic to be written as a clean and readable pipeline:

params
~> build_foo()
~> build_bar()
~> build_baz()

Installation

def deps do
[
  {:streamline, "~> 0.1"}
]
end

Usage

Import Streamline to use the ~> operator.

Examples

iex> import Streamline

# A successful pipeline
iex> {:ok, 5}
...> ~> then(fn x -> {:ok, x * 2} end)
...> ~> then(fn x -> x + 3 end)
{:ok, 13}

# Stopping on an error
iex> {:ok, 5}
...> ~> then(fn _ -> {:error, "failure"} end)
...> ~> then(fn x -> {:ok, x * 2} end)
{:error, "failure"}

# Wrapping a plain value
iex> 5
...> ~> then(fn x -> x * 2 end)
{:ok, 10}