lib/ash/registry/dsl.ex

defmodule Ash.Registry.Dsl do
  @entry %Ash.Dsl.Entity{
    name: :entry,
    describe: "A reference to an ash module (typically a resource)",
    target: Ash.Registry.Entry,
    args: [:entry],
    examples: [
      "entry MyApp.User"
    ],
    schema: [
      entry: [
        type: :atom,
        required: true,
        doc: "The referenced module"
      ]
    ]
  }

  @entries %Ash.Dsl.Section{
    name: :entries,
    describe: "List the entries present in this registry",
    examples: [
      """
      entries do
        entry MyApp.User
        entry MyApp.Post
        entry MyApp.Comment
      end
      """
    ],
    entities: [
      @entry
    ],
    schema: [
      warn_on_empty?: [
        type: :boolean,
        doc: "Set to `false` to ignore warnings about an empty registry",
        default: true
      ]
    ]
  }

  @sections [@entries]

  @transformers [Ash.Registry.Transformers.WarnOnEmpty]

  @moduledoc """
  A small DSL for declaring an `Ash.Registry`.
  """

  use Ash.Dsl.Extension, sections: @sections, transformers: @transformers

  def warn_on_empty?(registry) do
    Extension.get_opt(registry, [:entries], :warn_on_empty?, false, true)
  end
end