-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}.