Current section

Files

Jump to
ex_shopify_schema lib ex_shopify_schema graphql url.ex
Raw

lib/ex_shopify_schema/graphql/url.ex

defmodule ExShopifySchema.Graphql.URL do
@moduledoc "Represents an [RFC 3986](https://datatracker.ietf.org/doc/html/rfc3986) and\n[RFC 3987](https://datatracker.ietf.org/doc/html/rfc3987)-compliant URI string.\n\nFor example, `\"https://example.myshopify.com\"` is a valid URL. It includes a scheme (`https`) and a host\n(`example.myshopify.com`).\n"
@type t() :: URI.t()
use Ecto.Type
@impl Ecto.Type
def type, do: :string
case Application.compile_env(:ex_shopify_schema, [:ecto_types, :uri], :struct) do
:struct ->
@impl Ecto.Type
def cast(nil), do: {:ok, nil}
def cast(str) when is_binary(str) do
case URI.new(str) do
{:ok, _uri} = ok -> 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(uri) when is_struct(uri, URI), do: {:ok, URI.to_string(uri)}
def dump(_data), do: :error
:string ->
@impl Ecto.Type
def cast(nil), do: {:ok, nil}
def cast(uri) when is_binary(uri), do: {:ok, uri}
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(uri) when is_binary(uri), do: {:ok, uri}
def dump(_data), do: :error
end
end