commit ab67c8b07191a42ea50ce12f4876156662676442
parent 486d9b6cd5c8ae58da7ec5165f97e2e58e79a56f
Author: srfsh <dev@srf.sh>
Date: Mon, 29 Aug 2022 11:23:23 +0300
Zenflows.GQL.Type: add url64 type
It will be useful for file uploads.
Diffstat:
1 file changed, 16 insertions(+), 0 deletions(-)
diff --git a/src/zenflows/gql/type.ex b/src/zenflows/gql/type.ex
@@ -35,6 +35,12 @@ scalar :base64, name: "Base64" do
serialize & &1
end
+@desc "A base64url-encoded (requires nonpadding and ignores whitespace) as String."
+scalar :url64, name: "Url64" do
+ parse &url64_parse/1
+ serialize & &1
+end
+
@desc "Cursors for pagination"
object :page_info do
@desc """
@@ -95,6 +101,16 @@ end
defp base64_parse(%Input.Null{}), do: {:ok, nil}
defp base64_parse(_), do: :error
+@spec url64_parse(Input.t()) :: {:ok, String.t() | nil} | :error
+defp url64_parse(%Input.String{value: v}) do
+ case Base.url_decode64(v, ignore: :whitespace, padding: false) do
+ {:ok, _} -> {:ok, v}
+ :error -> :error
+ end
+end
+defp url64_parse(%Input.Null{}), do: {:ok, nil}
+defp url64_parse(_), do: :error
+
@spec id_parse(Input.t()) :: {:ok, ID.t() | nil} | :error
def id_parse(%Input.String{value: v}), do: ID.cast(v)
def id_parse(%Input.Null{}), do: {:ok, nil}