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