Ash.Dsl behaviour (ash v1.37.2) View Source

The primary entry point for adding a DSL to a module.

To add a DSL to a module, add use Ash.Dsl, ...options. The options supported with use Ash.Dsl are:

  • :single_extension_kinds - The extension kinds that are allowed to have a single value. For example: [:data_layer] The default value is [].

  • :many_extension_kinds - The extension kinds that can have multiple values. e.g [notifiers: [Notifier1, Notifier2]] The default value is [].

  • :untyped_extensions? - Whether or not to support an extensions key which contains untyped extensions The default value is true.

  • :default_extensions - The extensions that are included by default. e.g [data_layer: Default, notifiers: [Notifier1]] Default values for single extension kinds are overwritten if specified by the implementor, while many extension kinds are appended to if specified by the implementor. The default value is [].

See the callbacks defined in this module to augment the behavior/compilation of the module getting a Dsl.

Link to this section Summary

Callbacks

Handle options in the context of the module, after all extensions have been processed. Must return a quote block.

Handle options in the context of the module. Must return a quote block.

Validate/add options. Those options will be passed to handle_opts and handle_before_compile

Link to this section Types

Specs

entity() :: %Ash.Dsl.Entity{
  args: term(),
  auto_set_fields: term(),
  describe: term(),
  entities: term(),
  examples: term(),
  hide: term(),
  modules: term(),
  name: term(),
  schema: term(),
  target: term(),
  transform: term()
}

Specs

opts() :: Keyword.t()

Specs

section() :: %Ash.Dsl.Section{
  describe: term(),
  entities: term(),
  examples: term(),
  imports: term(),
  modules: term(),
  name: term(),
  schema: term(),
  sections: term()
}

Link to this section Functions

Link to this section Callbacks

Link to this callback

handle_before_compile(arg1)

View Source

Specs

handle_before_compile(Keyword.t()) :: Macro.t()

Handle options in the context of the module, after all extensions have been processed. Must return a quote block.

Specs

handle_opts(Keyword.t()) :: Macro.t()

Handle options in the context of the module. Must return a quote block.

If you want to persist anything in the DSL persistence layer, use @persist {:key, value}. It can be called multiple times to persist multiple times.

Specs

init(opts()) :: {:ok, opts()} | {:error, String.t() | term()}

Validate/add options. Those options will be passed to handle_opts and handle_before_compile