defmodule Strom.DSL do
@moduledoc """
DSL for building components
"""
alias Strom.{Transformer, Mixer, Renamer, Sink, Source, Splitter}
defmacro source(name, origin) do
quote do
Source.new(unquote(name), unquote(origin))
end
end
defmacro sink(name, origin, sync \\ false) do
quote do
Sink.new(unquote(name), unquote(origin), unquote(sync))
end
end
defmacro mix(inputs, output, opts \\ []) do
quote do
Mixer.new(unquote(inputs), unquote(output), unquote(opts))
end
end
defmacro split(input, outputs, opts \\ []) do
quote do
Splitter.new(unquote(input), unquote(outputs), unquote(opts))
end
end
defmacro transform(names, function, acc \\ nil, opts \\ []) do
quote do
Transformer.new(unquote(names), unquote(function), unquote(acc), unquote(opts))
end
end
defmacro rename(names) do
quote do
Renamer.new(unquote(names))
end
end
end