Packages

spark

2.7.0
2.7.2 2.7.1 2.7.0 2.6.1 2.6.0 2.5.0 2.4.1 2.4.0 2.3.14 2.3.13 2.3.12 2.3.11 2.3.10 2.3.9 2.3.8 2.3.7 2.3.6 2.3.5 2.3.4 2.3.3 2.3.2 2.3.1 2.3.0 2.2.69 2.2.68 2.2.67 2.2.66 2.2.65 2.2.64 2.2.63 2.2.62 2.2.61 2.2.60 2.2.59 2.2.58 2.2.57 2.2.56 2.2.55 2.2.54 2.2.53 2.2.52 2.2.51 2.2.50 2.2.49 2.2.48 2.2.47 2.2.46 2.2.45 2.2.44 2.2.43 2.2.42 2.2.41 2.2.40 2.2.39 2.2.38 2.2.37 2.2.36 2.2.35 2.2.34 2.2.33 2.2.32 2.2.31 2.2.30 2.2.29 2.2.28 2.2.27 2.2.26 2.2.25 2.2.24 2.2.23 2.2.22 2.2.21 2.2.20 2.2.19 2.2.18 2.2.17 2.2.16 2.2.15 2.2.14 2.2.13 2.2.12 2.2.11 2.2.10 2.2.9 2.2.8 2.2.7 2.2.6 2.2.5 2.2.4 2.2.3 2.2.2 2.2.1 2.2.0 2.1.24 2.1.23 2.1.22 2.1.21 2.1.20 2.1.19 2.1.18 2.1.17 2.1.16 2.1.15 2.1.14 2.1.13 2.1.12 2.1.11 2.1.10 2.1.9 2.1.8 2.1.7 2.1.6 2.1.5 2.1.4 2.1.3 2.1.2 2.1.1 2.1.0 2.0.1 2.0.0 1.1.55 1.1.54 1.1.53 1.1.52 1.1.51 1.1.50 1.1.49 1.1.48 1.1.47 1.1.46 1.1.45 1.1.44 1.1.43 1.1.42 1.1.41 1.1.40 1.1.39 1.1.38 1.1.37 1.1.36 1.1.35 1.1.34 1.1.32 1.1.31 1.1.30 1.1.29 1.1.28 1.1.27 1.1.26 1.1.25 1.1.24 1.1.22 1.1.21 1.1.20 1.1.19 1.1.18 1.1.17 1.1.16 1.1.15 1.1.14 retired 1.1.13 1.1.12 1.1.11 1.1.10 1.1.9 1.1.8 1.1.7 1.1.6 1.1.5 1.1.4 1.1.3 1.1.2 1.1.1 1.1.0 1.0.9 1.0.8 1.0.7 1.0.6 1.0.5 1.0.4 1.0.3 1.0.2 1.0.1 1.0.0 0.4.12 0.4.11 0.4.10 0.4.9 0.4.8 0.4.7 0.4.6 0.4.5 0.4.4 0.4.3 0.4.2 0.4.1 0.3.12 0.3.11 0.3.10 0.3.9 0.3.8 0.3.7 0.3.6 0.3.5 0.3.4 0.3.3 0.3.2 0.3.1 0.3.0 0.2.18 0.2.17 0.2.16 0.2.15 0.2.14 0.2.13 0.2.12 0.2.11 0.2.10 0.2.9 0.2.8 0.2.7 0.2.6 0.2.5 0.2.4 0.2.3 0.2.2 0.2.1 0.2.0 0.1.29 0.1.28 0.1.27 0.1.26 0.1.25 0.1.24 0.1.23 0.1.22 0.1.21 0.1.20 0.1.19 0.1.18 0.1.17 0.1.16 0.1.15 0.1.14 0.1.13 0.1.12 0.1.11 0.1.10 0.1.9 0.1.8 0.1.7 0.1.6 0.1.5 0.1.4 0.1.3 0.1.2 0.1.1 0.1.0

Generic tooling for building DSLs

Current section

Files

Jump to
spark lib spark dsl verifier.ex
Raw

lib/spark/dsl/verifier.ex

# SPDX-FileCopyrightText: 2022 spark contributors <https://github.com/ash-project/spark/graphs/contributors>
#
# SPDX-License-Identifier: MIT
defmodule Spark.Dsl.Verifier do
@moduledoc """
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`.
## Testing
See `Spark.Test` for ExUnit helpers that turn verifier errors and
warnings into structured data instead of stderr output, so tests can
pattern-match on them:
- `Spark.Test.dsl_errors/1`, `Spark.Test.assert_dsl_error/2`,
`Spark.Test.refute_dsl_errors/1` for `{:error, _}` returns and raised
`Spark.Error.DslError` values.
- `Spark.Test.dsl_warnings/1`, `Spark.Test.assert_dsl_warning/2`,
`Spark.Test.refute_dsl_warnings/1` for `{:warn, _}` returns.
"""
@type warning() :: String.t() | {String.t(), :erl_anno.anno()}
@callback verify(map) ::
:ok
| {:error, term}
| {:warn, warning() | list(warning())}
defmacro __using__(_) do
quote generated: true do
@behaviour Spark.Dsl.Verifier
end
end
defdelegate get_persisted(dsl, key), to: Spark.Dsl.Transformer
defdelegate get_persisted(dsl, key, default), to: Spark.Dsl.Transformer
defdelegate get_option(dsl_state, path, option), to: Spark.Dsl.Transformer
defdelegate get_option(dsl_state, path, option, default), to: Spark.Dsl.Transformer
defdelegate fetch_option(dsl_state, path, option), to: Spark.Dsl.Transformer
defdelegate get_entities(dsl_state, path), to: Spark.Dsl.Transformer
end