Packages
absinthe
1.4.7
1.11.0
1.10.2
1.10.1
1.10.0
1.9.1
1.9.0
1.8.0
1.7.11
1.7.10
1.7.9
1.7.8
1.7.7
1.7.6
1.7.5
1.7.4
1.7.3
1.7.2
1.7.1
1.7.0
1.6.8
1.6.7
retired
1.6.6
1.6.5
1.6.4
1.6.3
1.6.2
1.6.1
1.6.0
1.6.0-rc.1
1.6.0-rc.0
1.5.5
1.5.4
1.5.3
1.5.2
1.5.1
1.5.0
1.5.0-rc.5
1.5.0-rc.4
1.5.0-rc.3
1.5.0-rc.2
1.5.0-rc.1
1.5.0-rc.0
1.5.0-beta.2
1.5.0-beta.1
1.5.0-beta.0
1.5.0-alpha.4
1.5.0-alpha.3
1.5.0-alpha.2
1.5.0-alpha.1
1.5.0-alpha.0
1.4.16
1.4.15
1.4.14
1.4.13
1.4.12
1.4.11
1.4.10
1.4.9
1.4.8
retired
1.4.7
1.4.6
1.4.5
1.4.4
1.4.3
1.4.2
1.4.1
1.4.0
1.4.0-rc.3
1.4.0-rc.2
1.4.0-rc.1
1.4.0-rc.0
1.4.0-beta.5
1.4.0-beta.4
1.4.0-beta.3
1.4.0-beta.2
1.4.0-beta.1
1.3.2
1.3.1
1.3.0
1.3.0-rc.0
1.3.0-beta.2
1.3.0-beta.1
1.3.0-beta.0
1.2.6
1.2.5
1.2.4
1.2.3
1.2.2
1.2.1
1.2.0
1.2.0-rc.0
1.2.0-beta.0
1.2.0-alpha0
1.2.0-alpha.2
1.2.0-alpha.1
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.0
0.5.2
0.5.1
0.5.0
0.4.6
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.2.3
0.2.2
0.2.1
0.1.0
GraphQL for Elixir
Security advisory:
This version has known vulnerabilities.
View advisories
Current section
Files
Jump to
Current section
Files
lib/absinthe/type/argument.ex
defmodule Absinthe.Type.Argument do
@moduledoc """
Used to define an argument.
Usually these are defined using `Absinthe.Schema.Notation.arg/2`
"""
alias Absinthe.Type
use Type.Fetch
@typedoc """
Argument configuration
* `:name` - The name of the argument, usually assigned automatically using `Absinthe.Schema.Notation.arg/2`.
* `:type` - The type values the argument accepts/will coerce to.
* `:deprecation` - Deprecation information for an argument, usually
set-up using `Absinthe.Schema.Notation.deprecate/1`.
* `:description` - Description of an argument, useful for introspection.
"""
@type t :: %__MODULE__{
name: binary,
type: Type.identifier_t,
default_value: any,
deprecation: Type.Deprecation.t | nil,
description: binary | nil,
__reference__: Type.Reference.t}
defstruct name: nil, description: nil, type: nil, deprecation: nil, default_value: nil, __reference__: nil
@doc """
Build an AST of the args map for inclusion in other types
## Examples
```
iex> build([foo: [type: :string], bar: [type: :integer]])
{:%{}, [],
[foo: {:%, [],
[{:__aliases__, [alias: false], [:Absinthe, :Type, :Argument]},
{:%{}, [], [name: "foo", type: :string]}]},
bar: {:%, [],
[{:__aliases__, [alias: false], [:Absinthe, :Type, :Argument]},
{:%{}, [], [name: "bar", type: :integer]}]}]}
```
"""
def build(args) when is_list(args) do
ast = for {arg_name, arg_attrs} <- args do
name = arg_name |> Atom.to_string
arg_data = arg_attrs |> Keyword.put(:name, name)
arg_ast = quote do: %Absinthe.Type.Argument{unquote_splicing(arg_data |> Absinthe.Type.Deprecation.from_attribute)}
{arg_name, arg_ast}
end
quote do: %{unquote_splicing(ast)}
end
defimpl Absinthe.Traversal.Node do
def children(node, _traversal) do
[node.type]
end
end
end