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)
[]