Current section

Files

Jump to
ex_shopify_schema lib ex_shopify_schema graphql date.ex
Raw

lib/ex_shopify_schema/graphql/date.ex

defmodule ExShopifySchema.Graphql.Date do
@moduledoc "Represents an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601)-encoded date string.\nFor example, September 7, 2019 is represented as `\"2019-07-16\"`.\n"
@type t() :: Date.t()
use Ecto.Type
@impl Ecto.Type
def type, do: :date
@impl Ecto.Type
def cast(nil), do: {:ok, nil}
def cast(str) when is_binary(str) do
case Date.from_iso8601(str) do
{:ok, date} -> {:ok, date}
{:error, _reason} -> :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(%Date{} = date), do: {:ok, Date.to_iso8601(date)}
def dump(_data), do: :error
end