Current section

Files

Jump to
squirrel src squirrel@internal@gleam.erl
Raw

src/squirrel@internal@gleam.erl

-module(squirrel@internal@gleam).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-export([is_identifier_char/1, to_function_name/1]).
-export_type([type/0, field/0]).
-type type() :: {list, type()} | {option, type()} | int | float | bool | string.
-type field() :: {field, binary(), type()}.
-spec is_identifier_char(binary()) -> boolean().
is_identifier_char(String) ->
case String of
<<"a"/utf8>> ->
true;
<<"b"/utf8>> ->
true;
<<"c"/utf8>> ->
true;
<<"d"/utf8>> ->
true;
<<"e"/utf8>> ->
true;
<<"f"/utf8>> ->
true;
<<"g"/utf8>> ->
true;
<<"h"/utf8>> ->
true;
<<"i"/utf8>> ->
true;
<<"j"/utf8>> ->
true;
<<"k"/utf8>> ->
true;
<<"l"/utf8>> ->
true;
<<"m"/utf8>> ->
true;
<<"n"/utf8>> ->
true;
<<"o"/utf8>> ->
true;
<<"p"/utf8>> ->
true;
<<"q"/utf8>> ->
true;
<<"r"/utf8>> ->
true;
<<"s"/utf8>> ->
true;
<<"t"/utf8>> ->
true;
<<"u"/utf8>> ->
true;
<<"v"/utf8>> ->
true;
<<"w"/utf8>> ->
true;
<<"x"/utf8>> ->
true;
<<"y"/utf8>> ->
true;
<<"z"/utf8>> ->
true;
<<"_"/utf8>> ->
true;
<<"0"/utf8>> ->
true;
<<"1"/utf8>> ->
true;
<<"2"/utf8>> ->
true;
<<"3"/utf8>> ->
true;
<<"4"/utf8>> ->
true;
<<"5"/utf8>> ->
true;
<<"6"/utf8>> ->
true;
<<"7"/utf8>> ->
true;
<<"8"/utf8>> ->
true;
<<"9"/utf8>> ->
true;
_ ->
false
end.
-spec to_function_name(binary()) -> binary().
to_function_name(Name) ->
Filtered = begin
_pipe = justin:snake_case(Name),
_pipe@1 = gleam@string:to_graphemes(_pipe),
_pipe@2 = gleam@list:filter(_pipe@1, fun is_identifier_char/1),
gleam@string:join(_pipe@2, <<""/utf8>>)
end,
case Filtered of
<<""/utf8>> ->
<<"return"/utf8>>;
<<"0"/utf8, _/binary>> ->
<<"return_"/utf8, Filtered/binary>>;
<<"1"/utf8, _/binary>> ->
<<"return_"/utf8, Filtered/binary>>;
<<"2"/utf8, _/binary>> ->
<<"return_"/utf8, Filtered/binary>>;
<<"3"/utf8, _/binary>> ->
<<"return_"/utf8, Filtered/binary>>;
<<"4"/utf8, _/binary>> ->
<<"return_"/utf8, Filtered/binary>>;
<<"5"/utf8, _/binary>> ->
<<"return_"/utf8, Filtered/binary>>;
<<"6"/utf8, _/binary>> ->
<<"return_"/utf8, Filtered/binary>>;
<<"7"/utf8, _/binary>> ->
<<"return_"/utf8, Filtered/binary>>;
<<"8"/utf8, _/binary>> ->
<<"return_"/utf8, Filtered/binary>>;
<<"9"/utf8, _/binary>> ->
<<"return_"/utf8, Filtered/binary>>;
<<"_"/utf8, _/binary>> ->
<<"return_"/utf8, Filtered/binary>>;
_ ->
Filtered
end.