View Source Strom.Mixer (strom v0.8.7)

Mix several streams into one. Use Strom.GenMix under the hood

## Example
iex> alias Strom.Mixer
iex> mixer = [:s1, :s2] |> Mixer.new(:stream) |> Mixer.start()
iex> flow = %{s1: [1, 2, 3], s2: [4, 5, 6]}
iex> %{stream: stream} = Mixer.call(flow, mixer)
iex> stream |> Enum.to_list() |> Enum.sort()
[1, 2, 3, 4, 5, 6]

## Can also accept a map with functions as values. Works like "filter".
iex> alias Strom.Mixer
iex> inputs = %{s1: &(rem(&1, 2) == 0), s2: &(rem(&1, 2) == 1)}
iex> mixer = inputs |> Mixer.new(:stream) |> Mixer.start()
iex> flow = %{s1: [1, 2, 3], s2: [4, 5, 6]}
iex> %{stream: stream} = Mixer.call(flow, mixer)
iex> stream |> Enum.to_list() |> Enum.sort()
[2, 5]

Summary

Types

@type event() :: any()
@type t() :: %Strom.Mixer{inputs: term(), opts: term(), output: term(), pid: term()}

Functions

@spec call(Strom.flow(), t()) :: Strom.flow()
Link to this function

new(inputs, output, opts \\ [])

View Source
@spec new(
  [Strom.stream_name()]
  | %{required(Strom.stream_name()) => (event() -> as_boolean(any()))},
  Strom.stream_name(),
  list()
) :: t()
@spec start(t()) :: t()
@spec stop(t()) :: :ok