-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 => <>, 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)).