jzimmek

jzimmek

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.

Showing Posts 1 to 2

zachdaniel

zachdaniel

Creator of Ash

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.

jzimmek

jzimmek OP

thx @zachdaniel for responding so fast.

i have created a repro by adding a failing union_test.exs

https://github.com/ash-project/ash_graphql/pull/363

— All posts loaded —

Where Next? Top

Trending in Questions Top

RSP87
I’m working on a project that simulates the bumbl example in the programming phoenix book. It acts almost like an email client. We have a...
New
kpanic
Hi everyone, I am toying with the idea of building a “match maker” for giving personal help to people that wants to start coding. I sta...
New
nseaSeb
Hello, I know there is an approach for handling lists that allows for optimized traversal, but I can’t recall the specific method (somet...
New
brecabral
Documentation While reading the Scoped Routes section, I noticed that the documentation currently refers to a problem without explainin...
New
velrest
So my question is quite simple and i have found no conclusive answer on forum, google or AI. Should we use :erlang.float for Integer to ...
New
asweet-confluent
I recently noticed that Elixir’s Logger defaults its primary log level to :debug when no :logger, :level application configuration is pre...
New
apz
I’m new to elixir and just tried to install the elixirLS extension for VScode(ium) and it is throwing some errors that I would like help ...
New

Other Trending Topics Top

GenericJam
Edit: 2026 May 15 - This post is archived. Mob is alive!! Main docs: mob v0.7.11 — Documentation A bit of explanation for the slightly c...
New
JesseHerrick
Hey, I’m Jesse and I’m the main contributor behind Dexter, a full-featured, lightning-fast Elixir LSP optimized for large codebases. It s...
New
mudasobwa
I am happy to introduce the very α version of the new programming language compiled to BEAM. Welcome Cure. It has literally three kille...
New
marciok
Hi there! We created Gust: A task orchestrator inspired by Airflow. For those who have never heard about Aiflow, it’s a Python-based wor...
New
mhanberg
Hi everyone! The first release candidate for the Expert language server project is now available! We’ve published a press release detai...
New
jimsynz
Beam Bots (or just BB for short) is a framework for building fault-tolerant robotics applications in Elixir using familiar OTP patterns. ...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews