ash_graphql/lib/types/json.ex
Zach Daniel 0aa2787d52 improvement: support identity: false for read
improvement: don't type embedded resources is nullable
2021-05-22 23:49:31 -04:00

37 lines
978 B
Elixir

defmodule AshGraphql.Types.JSON do
@moduledoc """
The Json scalar type allows arbitrary JSON values to be passed in and out.
"""
use Absinthe.Schema.Notation
scalar :json, name: "Json" do
description("""
The `Json` scalar type represents arbitrary json string data, represented as UTF-8
character sequences. The Json type is most often used to represent a free-form
human-readable json string.
""")
serialize(&encode/1)
parse(&decode/1)
end
@spec decode(Absinthe.Blueprint.Input.String.t()) :: {:ok, term()} | :error
@spec decode(Absinthe.Blueprint.Input.Null.t()) :: {:ok, nil}
def decode(%Absinthe.Blueprint.Input.String{value: value}) do
case Jason.decode(value) do
{:ok, result} -> {:ok, result}
_ -> :error
end
end
def decode(%Absinthe.Blueprint.Input.Null{}) do
{:ok, nil}
end
def decode(_) do
:error
end
def encode(nil), do: nil
def encode(value), do: Jason.encode!(value)
end