Current section
Files
Jump to
Current section
Files
src/friendly_id.erl
-module(friendly_id).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/friendly_id.gleam").
-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/friendly_id.gleam", 28).
-spec take_random_element(glearray:array(DOT)) -> DOT.
take_random_element(Array) ->
Index = begin
_pipe = erlang:tuple_size(Array),
gleam@int:random(_pipe)
end,
Element@1 = case glearray_ffi:get(Array, Index) of
{ok, Element} -> Element;
_assert_fail ->
erlang:error(#{gleam_error => let_assert,
message => <<"Pattern match failed, no pattern matched the value."/utf8>>,
file => <<?FILEPATH/utf8>>,
module => <<"friendly_id"/utf8>>,
function => <<"take_random_element"/utf8>>,
line => 33,
value => _assert_fail,
start => 818,
'end' => 877,
pattern_start => 829,
pattern_end => 840})
end,
Element@1.
-file("src/friendly_id.gleam", 37).
-spec prepend_predicates(
list(binary()),
integer(),
integer(),
glearray:array(binary())
) -> list(binary()).
prepend_predicates(Acc, Count, Max, Predicates) ->
case Count =:= Max of
true ->
Acc;
false ->
prepend_predicates(
[take_random_element(Predicates) | Acc],
Count + 1,
Max,
Predicates
)
end.
-file("src/friendly_id.gleam", 17).
?DOC(
" Generates a friendly ID from a Generator record.\n"
"\n"
" # Examples\n"
"\n"
" ## Create a generator with defaults, then generate an ID\n"
"\n"
" ```gleam\n"
" let generator = generator.new()\n"
" echo friendly_id.generate(generator)\n"
" ```\n"
).
-spec generate(friendly_id@generator:generator()) -> binary().
generate(Generator) ->
_pipe = [take_random_element(friendly_id@generator:get_objects(Generator))],
_pipe@1 = prepend_predicates(
_pipe,
0,
friendly_id@generator:get_predicate_count(Generator),
friendly_id@generator:get_predicates(Generator)
),
_pipe@2 = gleam@list:map(
_pipe@1,
friendly_id@generator:get_transform_fn(Generator)
),
gleam@string:join(_pipe@2, friendly_id@generator:get_separator(Generator)).