Current section
Files
Jump to
Current section
Files
src/glorage.erl
-module(glorage).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-export([run/1, once/2, with/2]).
-spec get_table_name() -> binary().
get_table_name() ->
<<"glorage "/utf8,
(begin
_pipe = erlang:self(),
gleam@string:inspect(_pipe)
end)/binary>>.
-spec run(fun(() -> KNM)) -> KNM.
run(Cb) ->
_assert_subject = begin
_pipe = get_table_name(),
_pipe@1 = carpenter@table:build(_pipe),
_pipe@2 = carpenter@table:privacy(_pipe@1, private),
_pipe@3 = carpenter@table:write_concurrency(
_pipe@2,
no_write_concurrency
),
_pipe@4 = carpenter@table:read_concurrency(_pipe@3, false),
_pipe@5 = carpenter@table:decentralized_counters(_pipe@4, false),
_pipe@6 = carpenter@table:compression(_pipe@5, false),
carpenter@table:set(_pipe@6)
end,
{ok, Storage} = case _assert_subject of
{ok, _} -> _assert_subject;
_assert_fail ->
erlang:error(#{gleam_error => let_assert,
message => <<"Assertion pattern match failed"/utf8>>,
value => _assert_fail,
module => <<"glorage"/utf8>>,
function => <<"run"/utf8>>,
line => 8})
end,
Resp = Cb(),
_pipe@7 = Storage,
carpenter@table:drop(_pipe@7),
Resp.
-spec once(any(), fun(() -> KNO)) -> KNO.
once(Fun, Cb) ->
_assert_subject = begin
_pipe = get_table_name(),
carpenter@table:ref(_pipe)
end,
{ok, Storage} = case _assert_subject of
{ok, _} -> _assert_subject;
_assert_fail ->
erlang:error(#{gleam_error => let_assert,
message => <<"Assertion pattern match failed"/utf8>>,
value => _assert_fail,
module => <<"glorage"/utf8>>,
function => <<"once"/utf8>>,
line => 24})
end,
case begin
_pipe@1 = carpenter@table:lookup(Storage, Fun),
gleam@list:first(_pipe@1)
end of
{ok, {_, Cached}} ->
Cached;
{error, nil} ->
Resp = Cb(),
carpenter@table:insert(Storage, [{Fun, Resp}]),
Resp
end.
-spec with(fun((any()) -> KNQ), fun((KNQ) -> KNR)) -> KNR.
with(Fun, Cb) ->
_assert_subject = begin
_pipe = get_table_name(),
carpenter@table:ref(_pipe)
end,
{ok, Storage} = case _assert_subject of
{ok, _} -> _assert_subject;
_assert_fail ->
erlang:error(#{gleam_error => let_assert,
message => <<"Assertion pattern match failed"/utf8>>,
value => _assert_fail,
module => <<"glorage"/utf8>>,
function => <<"with"/utf8>>,
line => 37})
end,
_assert_subject@1 = begin
_pipe@1 = carpenter@table:lookup(Storage, Fun),
gleam@list:first(_pipe@1)
end,
{ok, {_, Cached}} = case _assert_subject@1 of
{ok, {_, _}} -> _assert_subject@1;
_assert_fail@1 ->
erlang:error(#{gleam_error => let_assert,
message => <<"Assertion pattern match failed"/utf8>>,
value => _assert_fail@1,
module => <<"glorage"/utf8>>,
function => <<"with"/utf8>>,
line => 38})
end,
_pipe@2 = Cached,
Cb(_pipe@2).