# SPDX-FileCopyrightText: 2019 ash contributors # # SPDX-License-Identifier: MIT defmodule Ash.Flags do @moduledoc false @flags [] @flag_values Enum.reduce(@flags, %{}, fn {key, default}, values -> Map.put(values, key, Keyword.get(@flag_config, key, default)) end) @noop {:__block__, [], []} @doc """ Ensure that the feature flag is set to the expected value, otherwise an exception will be thrown at run time. """ @spec assert!(atom, any) :: Macro.t() defmacro assert!(_flag, _expected) when @flag_values == %{}, do: @noop # defmacro assert!(flag, expected) when :erlang.map_get(flag, @flag_values) == expected, do: @noop # defmacro assert!(flag, expected) when :erlang.map_get(flag, @flag_values) != expected do # actual = Map.get(@flag_values, flag) # heading = # "Expected value of the `#{inspect(flag)}` feature flag to be `#{inspect(expected)}`, # however it is `#{inspect(actual)}`." # quote do # raise Ash.Error.Framework.FlagAssertionFailed.exception( # flag: unquote(flag), # heading: unquote(heading) # ) # end # end @doc """ Ensure that the feature flag is set to the expected value, otherwise an exception will be thrown at run time. """ @spec refute!(atom, any) :: Macro.t() defmacro refute!(_flag, _expected) when @flag_values == %{}, do: @noop # defmacro refute!(flag, expected) when :erlang.map_get(flag, @flag_values) != expected, do: @noop # defmacro refute!(flag, expected) when :erlang.map_get(flag, @flag_values) == expected do # heading = # "Expected value of the `#{inspect(flag)}` feature flag not to be `#{inspect(expected)}`." # quote do # raise Ash.Error.Framework.FlagAssertionFailed.exception( # flag: unquote(flag), # heading: unquote(heading) # ) # end # end end