Current section

Files

Jump to
gleam_stdlib src gleam@base.erl
Raw

src/gleam@base.erl

-module(gleam@base).
-compile([no_auto_import, nowarn_unused_vars]).
-export([encode64/2, url_encode64/2, decode64/1, url_decode64/1]).
-spec encode64(bitstring(), boolean()) -> binary().
encode64(Input, Padding) ->
Encoded = base64:encode(Input),
case Padding of
true ->
Encoded;
false ->
gleam@string:replace(Encoded, <<"="/utf8>>, <<""/utf8>>)
end.
-spec url_encode64(bitstring(), boolean()) -> binary().
url_encode64(Input, Padding) ->
_pipe = encode64(Input, Padding),
_pipe@1 = gleam@string:replace(_pipe, <<"+"/utf8>>, <<"-"/utf8>>),
gleam@string:replace(_pipe@1, <<"/"/utf8>>, <<"_"/utf8>>).
-spec decode64(binary()) -> {ok, bitstring()} | {error, nil}.
decode64(Encoded) ->
Padded = case gleam@bit_string:byte_size(
gleam@bit_string:from_string(Encoded)
)
rem 4 of
0 ->
Encoded;
N ->
gleam@string:append(
Encoded,
gleam@string:repeat(<<"="/utf8>>, 4 - N)
)
end,
gleam_stdlib:base_decode64(Padded).
-spec url_decode64(binary()) -> {ok, bitstring()} | {error, nil}.
url_decode64(Encoded) ->
_pipe = Encoded,
_pipe@1 = gleam@string:replace(_pipe, <<"-"/utf8>>, <<"+"/utf8>>),
_pipe@2 = gleam@string:replace(_pipe@1, <<"_"/utf8>>, <<"/"/utf8>>),
decode64(_pipe@2).