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([new_generator/2, new_default_generator/1, generate/1]).
-export_type([generator/0]).
-if(?OTP_RELEASE >= 27).
-define(MODULEDOC(Str), -moduledoc(Str)).
-define(DOC(Str), -doc(Str)).
-else.
-define(MODULEDOC(Str), -compile([])).
-define(DOC(Str), -compile([])).
-endif.
-type generator() :: {generator,
iv:array(binary()),
iv:array(binary()),
fun((binary()) -> binary()),
binary()}.
-file("src/friendly_id.gleam", 43).
?DOC(
" Create a `Generator` record with no transform function.\n"
"\n"
" # Examples\n"
"\n"
" ## Create a generator with an uppercase transform and a \"_\" separator, then generate an ID\n"
"\n"
" ```gleam\n"
" let generator = new_generator(string.uppercase, \"_\")\n"
" echo generate(generator)\n"
" ```\n"
).
-spec new_generator(fun((binary()) -> binary()), binary()) -> generator().
new_generator(Transform_fn, Separator) ->
{generator,
friendly_id@words:get_objects(),
friendly_id@words:get_predicates(),
Transform_fn,
Separator}.
-file("src/friendly_id.gleam", 29).
?DOC(
" Create a `Generator` record with no transform function.\n"
"\n"
" # Examples\n"
"\n"
" ## Create a generator with a \"_\" separator, then generate an ID\n"
"\n"
" ```gleam\n"
" let generator = new_default_generator(\"_\")\n"
" echo generate(generator)\n"
" ```\n"
).
-spec new_default_generator(binary()) -> generator().
new_default_generator(Separator) ->
new_generator(fun gleam@function:identity/1, Separator).
-file("src/friendly_id.gleam", 74).
-spec take_random_element(iv:array(ILB)) -> ILB.
take_random_element(Array) ->
Index = begin
_pipe = iv:size(Array),
gleam@int:random(_pipe)
end,
Element@1 = case iv: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 => 79,
value => _assert_fail,
start => 1933,
'end' => 1988,
pattern_start => 1944,
pattern_end => 1955})
end,
Element@1.
-file("src/friendly_id.gleam", 65).
?DOC(
" Generates a friendly ID from a Generator record.\n"
"\n"
" # Examples\n"
"\n"
" ## Create a generator with an uppercase transform and a \"_\" separator, then generate an ID\n"
"\n"
" ```gleam\n"
" let generator = new_generator(string.uppercase, \"_\")\n"
" echo generate(generator)\n"
" ```\n"
).
-spec generate(generator()) -> binary().
generate(Generator) ->
_pipe = [take_random_element(erlang:element(3, Generator)),
take_random_element(erlang:element(2, Generator))],
_pipe@1 = gleam@list:map(_pipe, erlang:element(4, Generator)),
gleam@string:join(_pipe@1, erlang:element(5, Generator)).