Spark.Dsl.Verifier behaviour (spark v2.6.0)

Copy Markdown View Source

A verifier validates DSL state after compilation without modifying it.

Unlike transformers, verifiers run after the module is compiled, so referencing other modules (e.g. checking that a related resource exists) will not create compile-time dependencies between them.

Usage

defmodule MyApp.MyExtension.Verifiers.ValidateNames do
  use Spark.Dsl.Verifier

  def verify(dsl_state) do
    case Spark.Dsl.Verifier.get_option(dsl_state, [:my_section], :name) do
      nil -> {:error, Spark.Error.DslError.exception(message: "name is required")}
      _name -> :ok
    end
  end
end

Callback

verify/1 receives the DSL state and should return:

  • :ok - validation passed
  • {:error, term} - validation failed
  • {:warn, warning | [warning]} - validation passed with warnings

Reading State

This module delegates read-only functions from Spark.Dsl.Transformer: get_entities/2, get_option/3, fetch_option/3, get_persisted/2.

Summary

Types

warning()

@type warning() :: String.t() | {String.t(), :erl_anno.anno()}

Callbacks

verify(map)

@callback verify(map()) :: :ok | {:error, term()} | {:warn, warning() | [warning()]}

Functions

fetch_option(dsl_state, path, option)

See Spark.Dsl.Transformer.fetch_option/3.

get_entities(dsl_state, path)

See Spark.Dsl.Transformer.get_entities/2.

get_option(dsl_state, path, option)

See Spark.Dsl.Transformer.get_option/3.

get_option(dsl_state, path, option, default)

See Spark.Dsl.Transformer.get_option/4.

get_persisted(dsl, key)

See Spark.Dsl.Transformer.get_persisted/2.

get_persisted(dsl, key, default)

See Spark.Dsl.Transformer.get_persisted/3.