Current section
Files
Jump to
Current section
Files
src/base_x_gleam.erl
-module(base_x_gleam).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-export([generate/1]).
-if(?OTP_RELEASE >= 27).
-define(MODULEDOC(Str), -moduledoc(Str)).
-define(DOC(Str), -doc(Str)).
-else.
-define(MODULEDOC(Str), -compile([])).
-define(DOC(Str), -compile([])).
-endif.
-file("src/base_x_gleam.gleam", 8).
?DOC(" Returns a tuple containing the encoding and decoding functions.\n").
-spec generate(binary()) -> {ok,
{fun((bitstring()) -> binary()),
fun((binary()) -> {ok, bitstring()} | {error, nil})}} |
{error, nil}.
generate(Alphabet) ->
gleam@bool:guard(
string:length(Alphabet) =< 2,
{error, nil},
fun() ->
Alphabet_list = gleam@string:to_graphemes(Alphabet),
gleam@bool:guard(
begin
_pipe = Alphabet_list,
erlang:length(_pipe)
end
/= begin
_pipe@1 = Alphabet_list,
_pipe@2 = gleam@list:unique(_pipe@1),
erlang:length(_pipe@2)
end,
{error, nil},
fun() ->
Alphabet_map = base_x_gleam@internal@encoders:alphabet_to_map(
Alphabet_list
),
Reverse_alphabet_map = base_x_gleam@internal@encoders:map_reverse(
Alphabet_map
),
Alphabet_size = maps:size(Alphabet_map),
Encoder = fun(_capture) ->
base_x_gleam@internal@encoders:encode(
_capture,
Alphabet_map,
Alphabet_size
)
end,
Decoder = fun(_capture@1) ->
base_x_gleam@internal@encoders:decode(
_capture@1,
Reverse_alphabet_map,
Alphabet_size
)
end,
{ok, {Encoder, Decoder}}
end
)
end
).