defmodule Strom.Splitter do alias Strom.GenMix defstruct pid: nil, input: nil, outputs: [], opts: [] def new(input, outputs) when is_list(outputs) or (is_map(outputs) and map_size(outputs)) > 0 do %Strom.Splitter{input: input, outputs: outputs} end def start( %__MODULE__{input: input, outputs: outputs} = splitter, opts \\ [] ) do inputs = %{input => fn _el -> true end} outputs = if is_list(outputs) do Enum.reduce(outputs, %{}, fn name, acc -> Map.put(acc, name, fn _el -> true end) end) else outputs end gen_mix = %GenMix{ inputs: inputs, outputs: outputs, opts: opts } {:ok, pid} = GenMix.start(gen_mix) %{splitter | pid: pid, opts: opts} end def call(flow, %__MODULE__{pid: pid}) do GenMix.call(flow, pid) end def stop(%__MODULE__{pid: pid}), do: GenMix.stop(pid) end