jzimmek
Missing "type" compile error on using a union (including Ash.TypedStruct member) as action argument in ash_graphql
I am evaluating ash_graphql 1.8.3 and pretty happy and impressed. but i struggle to get a union as action argument working that includes a “Ash.TypedStruct” member.
given the following “MyUnion” module:
defmodule Todos.MyUnion do
use Ash.Type.NewType,
subtype_of: :union,
constraints: [
types: [
member1: [
type: {:array, :boolean},
tag: :type,
tag_value: "member1"
],
member2: [
type: :string,
tag: :type,
tag_value: "member2"
],
# ---- the member3 is causing a compile error
member3: [
type: Todos.MyType,
tag: :type,
tag_value: "member3"
]
]
]
use AshGraphql.Type
def graphql_type(_), do: :my_union
def graphql_input_type(_), do: :my_union_input
end
Todos.MyType module:
defmodule Todos.MyType do
use Ash.TypedStruct
typed_struct do
field :street, :string, allow_nil?: false
field :city, :string, allow_nil?: false
field :state, :string, constraints: [max_length: 2]
field :zip, :string, constraints: [match: ~r/^\d{5}$/]
end
use AshGraphql.Type
def graphql_type(_), do: :my_type
def graphql_input_type(_), do: :my_type_input
end
the Todos.Item resource action:
defmodule Todos.Item do
...
action :union_test do
argument :union_arg, Todos.MyUnion, allow_nil?: false
run fn input, context ->
:ok
end
end
...
end
i get the following error on compilation:
** (Absinthe.Schema.Error) Compilation failed:
---------------------------------------
## Locations
/workspace/apps/.../deps/ash_graphql/lib/ash_graphql.ex:313
In field Value, :my_type is not defined in your schema.
Types must exist if referenced.
---------------------------------------
## Locations
/workspace/apps/.../deps/ash_graphql/lib/ash_graphql.ex:313
In argument Member3, :my_type_input is not defined in your schema.
Types must exist if referenced.
(absinthe 1.7.10) lib/absinthe/schema.ex:414: Absinthe.Schema.__after_compile__/2
(stdlib 6.2.2) lists.erl:2146: :lists.foldl/3
(elixir 1.18.4) lib/kernel/parallel_compiler.ex:423: anonymous fn/5 in Kernel.ParallelCompiler.spawn_workers/8
it seems that the union-member type’s are not being registered in the absinthe. i tried to dig into the ash_graphql/absinthe source, but was not able to pin-point where this is happening.
i am not sure if this is a bug or i did something wrong in the code above.
if i comment out “member3”, the union as argument works as expected:
#member3: [
# type: Todos.MyType,
# tag: :type,
# tag_value: "member3"
#]
if i use the Todos.MyType, instead of Todos.MyUnion as argument, it also works as expected:
defmodule Hamazon.Todos.Item do
...
action :union_test do
argument :union_arg, Todos.MyType, allow_nil?: false
run fn input, context ->
:ok
end
end
...
end
any help would be really appreciated.
First Post!
zachdaniel
Hmm…could you please create a reproduction or a failing test in ash_graphql? On limited time that really helps me investigate these kinds of things. Also open an issue since it’s definitely a bug.
Popular in Questions
Other popular topics
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #deployment
- #library
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #channels
- #elixirconf
- #exunit
- #discussion
- #code-sync
- #javascript
- #podcasts
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #elixir-ls
- #phoenix_html
- #iex
- #blog-post
- #graphql
- #genstage
- #ai
- #websockets
- #supervisor
- #advent-of-code
- #elixirconf-us
- #distillery
- #processes
- #forms
- #api
- #metaprogramming
- #security
- #performance










