defmodule Ash.Query.Not do @moduledoc "Represents the negation of the contained expression" defstruct [:expression] def new(nil), do: nil def new(%__MODULE__{expression: expression}), do: expression def new(true), do: false def new(false), do: true def new(expression) do %__MODULE__{expression: expression} end defimpl Inspect do import Inspect.Algebra def inspect(%{expression: expression}, opts) do opts = put_container_type(opts) concat(["not ", to_doc(expression, opts)]) end # custom options not available before Elixir 1.9 defp put_container_type(opts) do custom_options = apply(Map, :get, [opts, :custom_options]) apply(Map, :put, [ opts, :custom_options, Keyword.put(custom_options, :container_type, :not) ]) # above version required to avoid dialyzer warnings on lack of custom_options in pre-1.9 elixir # %{opts | custom_options: Keyword.put(opts.custom_options, :container_type, container_type)} end end end