I think your problem can be solved by using Absinthe.Middleware.MapGet
.
In your schema.ex
, define a new apply
function which transforms :gender atoms to strings. I assume you have a middleware function like this:
def middleware(middleware, field, object) do
middleware
# |> ...your own apply functions
|> apply(:get_string, field, object)
end
defp apply(middleware, :get_string, field, %{identifier: :gender} = object) do
new_middleware = {Absinthe.Middleware.MapGet, to_string(field.identifier)}
middleware
|> Absinthe.Schema.replace_default(new_middleware, field, object)
end
I stole this technique almost verbatim from Craft GraphQL APIs in Elixir with Absinthe (Pragprog)