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