Packages
absinthe_utils
0.2.0-1
0.3.0
0.2.0-1
0.1.0
0.0.8
0.0.7
0.0.6
0.0.5
0.0.4
0.0.3
0.0.2
0.0.1-main-fc1bcd7a9a3344c3b816f69996b44e81c7df841e
0.0.1-main-f3f7019eeb29e81e58b52a1904179d5651d5ce47
0.0.1-main-da68e7b37af94f1d1ff6ba949de0bbc71944a428
0.0.1-main-d5a2fe6243598a29dec4ddb349d351661463aec6
0.0.1-main-d255e08b6c32fe6449757ed94e6abba8bb9a31e7
0.0.1-main-b324c3236f3971cfc05577e796dca31477a46391
0.0.1-main-96f126a7c33a43fc8af80891c168df27cb6fe738
0.0.1-main-8a629d261d43f2b462d4b7e6bbd32fee4871d54b
0.0.1-main-72f3aaa55e5beeeb85467282d2d97db0eb3f4f43
0.0.1-main-6cbd7212b9c6abb25241183c5764ec6b58af0cfd
0.0.1-main-413ca15b56c2636667dc5f1b7898f81da11032b0
0.0.1-main-2bcf8f0401b45d43a9c4592f2311f2e2cfd9309c
0.0.1-main-02ce6a58b060743c268bd76061f9b1ef0d90354a
0.0.1-development
Collection of utils for absinthe
Current section
Files
Jump to
Current section
Files
lib/scalars/json.ex
if Application.get_env(:absinthe_utils, :compile_json_scalar, true) do
defmodule AbsintheUtils.Scalars.JSON do
@moduledoc """
The JSON scalar type allows arbitrary JSON values to be passed in and out.
Requires `{ :jason, ">= 1.1" }` package: https://github.com/michalmuskala/jason
Based on the
[recipes on Absinthe's wiki](https://github.com/absinthe-graphql/absinthe/wiki/Scalar-Recipes)
Note that even if you use `non_null(:json)` a string of null value (`"null"`) is still accepted.
**Usage:**
Import the type in your schema `import_types(AbsintheUtils.Scalars.JSON)` and you will be able
to use the `:json` type.
"""
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}
defp decode(%Absinthe.Blueprint.Input.String{value: value}) do
case Jason.decode(value) do
{:ok, result} -> {:ok, result}
_ -> :error
end
end
defp decode(%Absinthe.Blueprint.Input.Null{}) do
{:ok, nil}
end
defp decode(_), do: :error
defp encode(value) do
case Jason.encode(value) do
{:ok, _} ->
value
{:error, _} ->
raise Absinthe.SerializationError,
"Could not serialize term #{inspect(value)} as type UUID."
end
end
end
end