Packages

A Gleam implementation of CUID2, the secure, collision-resistant ids optimized for horizontal scaling and performance.

Current section

Files

Jump to
glecuid src glecuid_ffi.erl
Raw

src/glecuid_ffi.erl

-module(glecuid_ffi).
-export([bump_or_initialize_counter/1, hash/1]).
bump_or_initialize_counter(InitialValue) ->
try
CounterRef = persistent_term:get({?MODULE, "Counter"}),
counters:add(CounterRef, 1, 1),
counters:get(CounterRef, 1)
catch
_:_ ->
initialize_counter(InitialValue),
InitialValue
end.
initialize_counter(InitialValue) ->
CounterRef = counters:new(1, [write_concurrency]),
counters:put(CounterRef, 1, InitialValue),
persistent_term:put({?MODULE, "Counter"}, CounterRef).
hash(Data) ->
crypto:hash(sha3_512, Data).