OkThen.Result.Enum.map_grouped_by_tag

You're seeing just the function map_grouped_by_tag, go back to OkThen.Result.Enum module for more information.
Link to this function

map_grouped_by_tag(results, filter_function)

Specs

map_grouped_by_tag([OkThen.Result.tagged()], (atom(), [any()] -> [any()])) :: [
  OkThen.Result.tagged()
]

Modifies an Enum of results by applying filter_function to each group of values separately, according to their tag.

Note: The ordering of results is not maintained.

Examples

iex> [{:ok, 1}, {:ok, 2}, :error, :error]
...> |> Result.Enum.map_grouped_by_tag(fn
...>   :ok, values -> Enum.map(values, &(&1 + 1))
...>   :error, _values -> []
...> end)
[{:ok, 2}, {:ok, 3}]

iex> [{:ok, 1}]
...> |> Result.Enum.map_grouped_by_tag(fn
...>   :ok, _values -> nil
...> end)
** (ArgumentError) Expected filter_function clause for tag :ok to return a list, but got: nil

iex> [{:ok, 1}, {:error, 1}, {:ok, 2}, {:error, 2}, :none]
...> |> Result.Enum.map_grouped_by_tag(fn
...>   :ok, values -> Enum.map(values, &(&1 + 1))
...>   :error, values -> Enum.take(values, 1)
...>   :none, _values -> []
...> end)
[{:error, 1}, {:ok, 2}, {:ok, 3}]

iex> [{:some, 1}, :other, {:some, 2}]
...> |> Result.Enum.map_grouped_by_tag(fn
...>   :some, values -> Enum.map(values, &(&1 + 1))
...>   :other, _values -> []
...> end)
[{:some, 2}, {:some, 3}]

iex> [:ok, "hello", {:error, "hello"}, {1, 2}]
...> |> Result.Enum.map_grouped_by_tag(fn
...>   tag, _values when tag in [:ok, :error] -> []
...>   :untagged, values -> values
...> end)
[{:untagged, "hello"}, {:untagged, {1, 2}}]

iex> []
...> |> Result.Enum.map_grouped_by_tag(fn
...>   :ok, values -> Enum.map(values, &(&1 + 1))
...> end)
[]