Current section
Files
Jump to
Current section
Files
src/friendly_id@generator.erl
-module(friendly_id@generator).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/friendly_id/generator.gleam").
-export([get_predicates/1, get_objects/1, get_predicate_count/1, get_obj_multiplier/1, get_pred_multiplier/1, get_transform_fn/1, get_separator/1, set_predicate_count/2, set_transform_fn/2, set_separator/2, new/0, new_with_words/2]).
-export_type([generator/0, generator_error/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.
-opaque generator() :: {generator,
glearray:array(binary()),
glearray:array(binary()),
integer(),
fun((binary()) -> binary()),
binary(),
integer(),
integer()}.
-type generator_error() :: negative_predicate_count.
-file("src/friendly_id/generator.gleam", 79).
-spec get_predicates(generator()) -> glearray:array(binary()).
get_predicates(Generator) ->
erlang:element(3, Generator).
-file("src/friendly_id/generator.gleam", 83).
-spec get_objects(generator()) -> glearray:array(binary()).
get_objects(Generator) ->
erlang:element(2, Generator).
-file("src/friendly_id/generator.gleam", 87).
-spec get_predicate_count(generator()) -> integer().
get_predicate_count(Generator) ->
erlang:element(4, Generator).
-file("src/friendly_id/generator.gleam", 91).
-spec get_obj_multiplier(generator()) -> integer().
get_obj_multiplier(Generator) ->
erlang:element(7, Generator).
-file("src/friendly_id/generator.gleam", 95).
-spec get_pred_multiplier(generator()) -> integer().
get_pred_multiplier(Generator) ->
erlang:element(8, Generator).
-file("src/friendly_id/generator.gleam", 99).
-spec get_transform_fn(generator()) -> fun((binary()) -> binary()).
get_transform_fn(Generator) ->
erlang:element(5, Generator).
-file("src/friendly_id/generator.gleam", 103).
-spec get_separator(generator()) -> binary().
get_separator(Generator) ->
erlang:element(6, Generator).
-file("src/friendly_id/generator.gleam", 107).
-spec set_predicate_count(generator(), integer()) -> {ok, generator()} |
{error, generator_error()}.
set_predicate_count(Generator, Predicate_count) ->
case Predicate_count >= 0 of
true ->
{ok,
{generator,
erlang:element(2, Generator),
erlang:element(3, Generator),
Predicate_count,
erlang:element(5, Generator),
erlang:element(6, Generator),
erlang:element(7, Generator),
erlang:element(8, Generator)}};
false ->
{error, negative_predicate_count}
end.
-file("src/friendly_id/generator.gleam", 117).
-spec set_transform_fn(generator(), fun((binary()) -> binary())) -> generator().
set_transform_fn(Generator, Transform_fn) ->
{generator,
erlang:element(2, Generator),
erlang:element(3, Generator),
erlang:element(4, Generator),
Transform_fn,
erlang:element(6, Generator),
erlang:element(7, Generator),
erlang:element(8, Generator)}.
-file("src/friendly_id/generator.gleam", 124).
-spec set_separator(generator(), binary()) -> generator().
set_separator(Generator, Separator) ->
{generator,
erlang:element(2, Generator),
erlang:element(3, Generator),
erlang:element(4, Generator),
erlang:element(5, Generator),
Separator,
erlang:element(7, Generator),
erlang:element(8, Generator)}.
-file("src/friendly_id/generator.gleam", 128).
-spec gcd(integer(), integer()) -> integer().
gcd(A, B) ->
case B =:= 0 of
true ->
A;
false ->
gcd(B, case B of
0 -> 0;
Gleam@denominator -> A rem Gleam@denominator
end)
end.
-file("src/friendly_id/generator.gleam", 135).
-spec find_coprime(integer(), integer()) -> integer().
find_coprime(Length, Candidate) ->
case gcd(Length, Candidate) =:= 1 of
true ->
Candidate;
false ->
find_coprime(Length, Candidate + 1)
end.
-file("src/friendly_id/generator.gleam", 34).
?DOC(
" Create a `Generator` record with the following defaults:\n"
" - Predicate count: 1\n"
" - No separator\n"
" - No transformation\n"
" - Provided word lists\n"
" \n"
" # Examples\n"
" \n"
" ```gleam\n"
" let generator = generator.new()\n"
" ```\n"
).
-spec new() -> generator().
new() ->
Objects = friendly_id@words:get_objects(),
Predicates = friendly_id@words:get_predicates(),
Obj_multiplier = find_coprime(erlang:tuple_size(Objects), 859),
Pred_multiplier = find_coprime(erlang:tuple_size(Predicates), 859),
{generator,
Objects,
Predicates,
1,
fun gleam@function:identity/1,
<<""/utf8>>,
Obj_multiplier,
Pred_multiplier}.
-file("src/friendly_id/generator.gleam", 62).
?DOC(
" Create a `Generator` record with the word lists passed to it and the following defaults:\n"
" - Predicate count: 1\n"
" - No separator\n"
" - No transformation\n"
" \n"
" # Examples\n"
" \n"
" ```gleam\n"
" let objects = glearray.from_list([\"apple, potato\"])\n"
" let predicates = glearray.from_list([\"brave, insightful\"])\n"
" let generator = generator.new_with_words(objects:, predicates:)\n"
" ```\n"
).
-spec new_with_words(glearray:array(binary()), glearray:array(binary())) -> generator().
new_with_words(Objects, Predicates) ->
Obj_multiplier = find_coprime(erlang:tuple_size(Objects), 859),
Pred_multiplier = find_coprime(erlang:tuple_size(Predicates), 859),
{generator,
Objects,
Predicates,
1,
fun gleam@function:identity/1,
<<""/utf8>>,
Obj_multiplier,
Pred_multiplier}.