Current section
Files
Jump to
Current section
Files
lib/ex_shopify_schema/graphql/json.ex
defmodule ExShopifySchema.Graphql.JSON do
@moduledoc "A [JSON](https://www.json.org/json-en.html) object.\n\nExample value:\n`{\n \"product\": {\n \"id\": \"gid://shopify/Product/1346443542550\",\n \"title\": \"White T-shirt\",\n \"options\": [{\n \"name\": \"Size\",\n \"values\": [\"M\", \"L\"]\n }]\n }\n}`\n"
@type t() :: map()
use Ecto.Type
@impl Ecto.Type
def type, do: :map
@impl Ecto.Type
def cast(nil), do: {:ok, nil}
def cast(json) when is_binary(json) do
case Jason.decode(json) do
{:ok, map} = ok when is_map(map) -> ok
_other -> :error
end
end
def cast(_data), do: :error
@impl Ecto.Type
def load(data), do: cast(data)
@impl Ecto.Type
def dump(nil), do: {:ok, nil}
def dump(map) when is_map(map) do
case Jason.encode(map) do
{:ok, _json} = ok -> ok
_other -> :error
end
end
def dump(_data), do: :error
end