Packages
ash_graphql
1.0.1
1.9.4
1.9.3
1.9.2
1.9.1
1.9.0
1.8.5
1.8.4
1.8.3
1.8.2
1.8.1
1.8.0
1.7.17
1.7.16
1.7.15
1.7.14
1.7.13
1.7.12
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.0
1.5.1
1.5.0
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.3.4
1.3.3
1.3.2
1.3.1
1.3.0
1.2.1
1.2.0
1.1.1
1.1.0
1.0.1
1.0.0
1.0.0-rc.5
1.0.0-rc.4
retired
1.0.0-rc.3
1.0.0-rc.2
1.0.0-rc.1
1.0.0-rc.0
0.28.1
0.28.0
0.27.1
0.27.0
0.26.9
0.26.8
0.26.7
0.26.6
0.26.5
0.26.4
0.26.3
0.26.2
0.26.0
0.25.13
0.25.12
0.25.10
0.25.9
0.25.8
0.25.7
0.25.6
0.25.5
0.25.4
0.25.3
0.25.2
0.25.1
0.25.0
0.24.1
0.24.0
0.23.3
0.23.2
0.23.1
0.23.0
0.22.13
0.22.12
0.22.11
0.22.10
0.22.9
0.22.8
0.22.7
0.22.6
0.22.4
0.22.3
0.22.2
0.22.1
0.22.0
0.21.0
retired
0.20.5
0.20.4
0.20.3
0.20.2
0.20.1
0.20.0-rc.3
0.20.0-rc.2
0.20.0-rc.1
0.20.0-rc.0
0.19.0
0.18.0-rc0
0.17.5
0.17.5-rc0
0.17.4
0.17.2
0.17.1
0.17.0
0.16.28
0.16.27
0.16.26
0.16.25
0.16.24
0.16.23
0.16.22
0.16.21
0.16.20
0.16.18-rc5
0.16.18-rc4
0.16.18-rc3
0.16.18-rc2
0.16.18-rc1
0.16.18-rc0
0.16.17
0.16.16
0.16.15
0.16.14
0.16.13
0.16.12
0.16.11
0.16.10
0.16.9
0.16.8
0.16.7
0.16.6
0.16.5
0.16.4
0.16.3
0.16.2
0.16.1
0.16.0
0.15.10
0.15.9
0.15.8
0.15.7
0.15.6
0.15.5
0.15.4
0.15.3
0.15.2
0.15.1
0.15.0
0.14.1
0.14.0
0.13.1
0.13.0
0.12.5
0.12.4
0.12.3
0.12.1
0.12.0
0.10.0
0.9.5
0.9.4
0.9.3
0.9.2
0.9.1
0.9.0
0.8.0
0.7.5
0.7.4
0.7.3
0.7.2
0.7.1
0.7.0
0.6.3
0.6.2
0.6.1
0.6.0
0.5.0
0.4.0
0.3.2
0.3.1
0.3.0
0.2.1
0.2.0
0.1.3
0.1.2
The extension for building GraphQL APIs with Ash
Current section
Files
Jump to
Current section
Files
lib/type.ex
defmodule AshGraphql.Type do
@moduledoc """
Callbacks used to enrich types with GraphQL-specific metadata.
"""
defmacro __using__(_) do
quote do
@behaviour AshGraphql.Type
end
end
@doc """
Sets the name of the graphql type for a given Ash type. For example: `:weekday`.
This will do different things depending on the type you're adding it to.
## Regular Types
This expresses that you will define a custom type for representing this in your graphql
## NewTypes
If it is a subtype of a union, or map/keyword with `fields` the type will be *created* with that name.
So you can use this to decide what it will be named. Otherwise, it behaves as stated above for
regular types.
"""
@callback graphql_type(Ash.Type.constraints()) :: atom
@doc """
Sets the name of the graphql input type for a given Ash type. For example: `:weekday`.
This will do different things depending on the type you're adding it to.
## Regular Types
This expresses that you will define a custom type for representing this input in your graphql
## NewTypes
If it is a subtype of a union, or map/keyword with `fields` the type will be *created* with that name.
So you can use this to decide what it will be named. Otherwise, it behaves as stated above for
regular types.
"""
@callback graphql_input_type(Ash.Type.constraints()) :: atom
@doc """
Used for `Ash.Type.Enum` to rename individual values. For example:
```elixir
defmodule MyEnum do
use Ash.Type.Enum, values: [:foo, :bar, :baz]
def graphql_rename_value(:baz), do: :buz
def graphql_rename_value(other), do: other
end
```
"""
@callback graphql_rename_value(Ash.Type.constraints()) :: String.t() | atom
@doc """
Used for map/embedded types embedded in unions, to avoid nesting them in a key by their name.
See [the unions guide](/documentation/topics/use-unions-with-graphql.md) for more.
"""
@callback graphql_unnested_unions(Ash.Type.constraints()) :: [atom()]
@doc """
Used for maps/enums/unions that *would* define a type automatically, to disable them.
"""
@callback graphql_define_type?(Ash.Type.constraints()) :: false
@doc """
Used for `Ash.Type.Enum` to provide a description for individual values. For example:
```elixir
defmodule MyEnum do
use Ash.Type.Enum, values: [:foo, :bar, :baz]
def graphql_describe_enum_value(:baz), do: "A baz"
def graphql_describe_enum_value(_), do: nil
end
```
"""
@callback graphql_describe_enum_value(atom) :: String.t() | nil
@optional_callbacks graphql_type: 1,
graphql_input_type: 1,
graphql_rename_value: 1,
graphql_unnested_unions: 1,
graphql_describe_enum_value: 1,
graphql_define_type?: 1
end