defmodule Strom.Mixer do alias Strom.GenMix defstruct pid: nil, inputs: [], output: nil, opts: [] def new(inputs, output) when is_list(inputs) or (is_map(inputs) and map_size(inputs) > 0) do %__MODULE__{inputs: inputs, output: output} end def start(%__MODULE__{inputs: inputs, output: output} = mixer, opts \\ []) do inputs = if is_list(inputs) do Enum.reduce(inputs, %{}, fn name, acc -> Map.put(acc, name, fn _el -> true end) end) else inputs end outputs = %{output => fn _el -> true end} gen_mix = %GenMix{ inputs: inputs, outputs: outputs, opts: opts } {:ok, pid} = GenMix.start(gen_mix) %{mixer | 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