-module(lamb). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]). -export([from_name/1, is_alive/1, create_table/3, delete_table/1, insert/2, update/2, delete/2, get/2, all/2, batch/3, continue/1, count/2]). -export_type([table/2, store/0, access/0, error/1, partial/1, step/0]). -opaque table(GND, GNE) :: {table_set, gleam@erlang:reference_()} | {table_bag, gleam@erlang:reference_()} | {gleam_phantom, GND, GNE}. -type store() :: set | bag. -type access() :: public | protected | private. -type error(GNF) :: {not_supported, store()} | {not_found, GNF} | {already_exists, access(), gleam@erlang@atom:atom_()}. -type partial(GNG) :: {records, list(GNG), step()} | {'end', list(GNG)}. -type step() :: any(). -file("/Users/chouzar/Bench/Projects/lamb/src/lamb.gleam", 221). -spec build_table(gleam@erlang:reference_(), store()) -> table(any(), any()). build_table(Table_id, Store) -> case Store of set -> {table_set, Table_id}; bag -> {table_bag, Table_id} end. -file("/Users/chouzar/Bench/Projects/lamb/src/lamb.gleam", 228). -spec get_table_id(table(any(), any())) -> gleam@erlang:reference_(). get_table_id(Table) -> case Table of {table_set, Table_id} -> Table_id; {table_bag, Table_id@1} -> Table_id@1 end. -file("/Users/chouzar/Bench/Projects/lamb/src/lamb.gleam", 94). -spec from_name(binary()) -> {ok, gleam@erlang:reference_()} | {error, nil}. from_name(Name) -> case gleam_erlang_ffi:atom_from_string(Name) of {ok, Atom} -> lamb_erlang_ffi:table_id(Atom); {error, _} -> {error, nil} end. -file("/Users/chouzar/Bench/Projects/lamb/src/lamb.gleam", 101). -spec is_alive(table(any(), any())) -> boolean(). is_alive(Table) -> Table_id = get_table_id(Table), case lamb_erlang_ffi:table_id(Table_id) of {ok, _} -> true; {error, _} -> false end. -file("/Users/chouzar/Bench/Projects/lamb/src/lamb.gleam", 41). -spec create_table(store(), access(), binary()) -> {ok, table(any(), any())} | {error, error(any())}. create_table(Store, Access, Name) -> Name@1 = erlang:binary_to_atom(Name), case Access of private -> Table_id = lamb_erlang_ffi:create_table(Store, Access, Name@1), _pipe = Table_id, _pipe@1 = build_table(_pipe, Store), {ok, _pipe@1}; protected -> case lamb_erlang_ffi:table_id(Name@1) of {ok, _} -> {error, {already_exists, Access, Name@1}}; {error, nil} -> Name@2 = lamb_erlang_ffi:create_table(Store, Access, Name@1), _assert_subject = lamb_erlang_ffi:table_id(Name@2), {ok, Table_id@1} = case _assert_subject of {ok, _} -> _assert_subject; _assert_fail -> erlang:error(#{gleam_error => let_assert, message => <<"Pattern match failed, no pattern matched the value."/utf8>>, value => _assert_fail, module => <<"lamb"/utf8>>, function => <<"create_table"/utf8>>, line => 70}) end, _pipe@2 = Table_id@1, _pipe@3 = build_table(_pipe@2, Store), {ok, _pipe@3} end; public -> case lamb_erlang_ffi:table_id(Name@1) of {ok, _} -> {error, {already_exists, Access, Name@1}}; {error, nil} -> Name@2 = lamb_erlang_ffi:create_table(Store, Access, Name@1), _assert_subject = lamb_erlang_ffi:table_id(Name@2), {ok, Table_id@1} = case _assert_subject of {ok, _} -> _assert_subject; _assert_fail -> erlang:error(#{gleam_error => let_assert, message => <<"Pattern match failed, no pattern matched the value."/utf8>>, value => _assert_fail, module => <<"lamb"/utf8>>, function => <<"create_table"/utf8>>, line => 70}) end, _pipe@2 = Table_id@1, _pipe@3 = build_table(_pipe@2, Store), {ok, _pipe@3} end end. -file("/Users/chouzar/Bench/Projects/lamb/src/lamb.gleam", 81). -spec delete_table(table(any(), any())) -> nil. delete_table(Table) -> case is_alive(Table) of true -> _pipe = Table, _pipe@1 = get_table_id(_pipe), ets:delete(_pipe@1), nil; false -> nil end. -file("/Users/chouzar/Bench/Projects/lamb/src/lamb.gleam", 124). -spec insert(table(GNY, GNZ), list({GNY, GNZ})) -> nil. insert(Table, Rows) -> Table_id = get_table_id(Table), _assert_subject = ets:insert(Table_id, Rows), true = case _assert_subject of true -> _assert_subject; _assert_fail -> erlang:error(#{gleam_error => let_assert, message => <<"Pattern match failed, no pattern matched the value."/utf8>>, value => _assert_fail, module => <<"lamb"/utf8>>, function => <<"insert"/utf8>>, line => 126}) end, nil. -file("/Users/chouzar/Bench/Projects/lamb/src/lamb.gleam", 132). -spec update(table(GOD, GOE), lamb@query:'query'(GOD, GOE)) -> {ok, integer()} | {error, error(GOD)}. update(Table, Query) -> case Table of {table_set, Table_id} -> {ok, ets:select_replace(Table_id, [Query])}; {table_bag, _} -> {error, {not_supported, bag}} end. -file("/Users/chouzar/Bench/Projects/lamb/src/lamb.gleam", 158). -spec delete(table(GOM, GON), lamb@query:'query'(GOM, GON)) -> integer(). delete(Table, Query) -> Table_id = get_table_id(Table), ets:select_delete( Table_id, [begin _pipe = Query, lamb_query_erlang_ffi:update_body(_pipe, true) end] ). -file("/Users/chouzar/Bench/Projects/lamb/src/lamb.gleam", 171). -spec get(table(GOS, GOT), GOS) -> {ok, GOT} | {error, error(GOS)}. get(Table, Index) -> case Table of {table_set, Table_id} -> _pipe = lamb_erlang_ffi:get(Table_id, Index), gleam@result:replace_error(_pipe, {not_found, Index}); {table_bag, _} -> {error, {not_supported, bag}} end. -file("/Users/chouzar/Bench/Projects/lamb/src/lamb.gleam", 186). -spec all(table(GOZ, GPA), lamb@query:'query'(GOZ, GPA)) -> list(any()). all(Table, Query) -> Table_id = get_table_id(Table), ets:select(Table_id, [Query]). -file("/Users/chouzar/Bench/Projects/lamb/src/lamb.gleam", 199). -spec batch(table(GPH, GPI), integer(), lamb@query:'query'(GPH, GPI)) -> partial(any()). batch(Table, Limit, Query) -> Table_id = get_table_id(Table), lamb_erlang_ffi:search(Table_id, Limit, [Query]). -file("/Users/chouzar/Bench/Projects/lamb/src/lamb.gleam", 208). -spec continue(step()) -> partial(any()). continue(Step) -> lamb_erlang_ffi:search(Step). -file("/Users/chouzar/Bench/Projects/lamb/src/lamb.gleam", 212). -spec count(table(GPR, GPS), lamb@query:'query'(GPR, GPS)) -> integer(). count(Table, Query) -> Table_id = get_table_id(Table), ets:select_count( Table_id, [begin _pipe = Query, lamb_query_erlang_ffi:update_body(_pipe, true) end] ).