zf

zenflows testing
git clone https://s.sonu.ch/~srfsh/zf.git
Log | Files | Refs | Submodules | README | LICENSE

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:
Msrc/zenflows/gql/type.ex | 16++++++++++++++++
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}