Current section
Files
Jump to
Current section
Files
lib/gust/dsl.ex
defmodule Gust.DSL do
defmacro __using__(dag_options) do
quote do
import unquote(__MODULE__), only: [task: 2, task: 3]
Module.register_attribute(__MODULE__, :dag_tasks, accumulate: true)
def __dag_options__, do: unquote(dag_options)
@before_compile unquote(__MODULE__)
end
end
defmacro __before_compile__(_env) do
quote do
def __dag_tasks__, do: @dag_tasks
end
end
defmacro task(name, opts_and_ctx, do: block) do
{ctx_pattern, opts} = Keyword.pop(opts_and_ctx, :ctx)
ctx_pattern = ctx_pattern || quote do: %{run_id: run_id}
quote do
@dag_tasks {unquote(name), unquote(opts)}
def unquote(name)(ctx) do
unquote(ctx_pattern) = ctx
unquote(block)
end
end
end
defmacro task(name, do: block) do
quote do
@dag_tasks {unquote(name), []}
def unquote(name)(ctx) do
unquote(block)
end
end
end
end