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