Rustic Result

CICD Hex.pm License Hex Docs

Result monad for Elixir inspired by Rust Result type.

Installation

This package can be installed by adding rustic_result to your list of dependencies in mix.exs:

def deps do
  [
    {:rustic_result, "~> 0.2.0"}
  ]
end

Usage

import Rustic.Result

ok(42) == {:ok, 42}
# true

err(:not_found) == {:error, :not_found}
# true

ok(42) |> is_ok?()
# true

err(:not_found) |> is_err?()
# true

ok(1) |> and_then(fn v -> ok(v + 1) end)
# ok(2)

ok(1) |> and_then(fn _ -> err(:not_found) end)
# err(:not_found)

err(:not_found) |> and_then(fn v -> ok(v + 1) end)
# err(:not_found)

ok(1) |> or_else(fn _ -> ok(2) end)
# ok(1)

err(:not_found) |> or_else(fn :not_found -> ok(1) end)
# ok(1)

err(:not_found) |> or_else(fn :not_found -> err(:invalid) end)
# err(:invalid)

ok(1) |> unwrap!()
# 1

err(:not_found) |> unwrap!()
# ** (Rustic.Result.UnhandledError) Expected an Ok result, ":not_found" given.

ok(1) |> unwrap_or(2)
# 1

err(:not_found) |> unwrap_or(2)
# 2

ok(1) |> unwrap_err!()
# ** (Rustic.Result.MissingError) Expected an Err result, "1" given.

err(:not_found) |> unwrap_err!()
# :not_found