-
-
Notifications
You must be signed in to change notification settings - Fork 217
/
not.ex
40 lines (29 loc) · 1.02 KB
/
not.ex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
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