Current section
Files
Jump to
Current section
Files
src/spoke@core@ets_storage.erl
-module(spoke@core@ets_storage).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/spoke/core/ets_storage.gleam").
-export([new/0, load_from_file/1, store_to_file/2, read/1, delete/1, update/2]).
-export_type([ets_storage/0, ets_error/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.
?MODULEDOC(" Provides ETS-backed session storage on the Erlang target.\n").
-type ets_storage() :: any().
-type ets_error() :: any().
-file("src/spoke/core/ets_storage.gleam", 13).
?DOC(" Create a new empty ETS storage.\n").
-spec new() -> ets_storage().
new() ->
spoke_ets_ffi:new().
-file("src/spoke/core/ets_storage.gleam", 17).
?DOC(" Loads a session previously stored to a file using `store_to_file`.\n").
-spec load_from_file(binary()) -> {ok, ets_storage()} | {error, ets_error()}.
load_from_file(Filename) ->
spoke_ets_ffi:load_from_file(Filename).
-file("src/spoke/core/ets_storage.gleam", 21).
?DOC(" Stores the ETS table to a file, using Erlang's serialization.\n").
-spec store_to_file(ets_storage(), binary()) -> {ok, nil} | {error, ets_error()}.
store_to_file(Storage, Filename) ->
spoke_ets_ffi:store_to_file(Storage, Filename).
-file("src/spoke/core/ets_storage.gleam", 28).
?DOC(" Reads the currently stored session state.\n").
-spec read(ets_storage()) -> spoke@core@session_state:session_state().
read(Storage) ->
spoke_ets_ffi:read(Storage).
-file("src/spoke/core/ets_storage.gleam", 32).
?DOC(" Deletes the associated ETS table.\n").
-spec delete(ets_storage()) -> nil.
delete(Storage) ->
ets:delete(Storage).
-file("src/spoke/core/ets_storage.gleam", 35).
?DOC(" Updates the state of the storage.\n").
-spec update(ets_storage(), spoke@core@session_state:storage_update()) -> nil.
update(Storage, What) ->
case What of
{clear_packet_state, Id} ->
ets:delete(Storage, Id);
clear_session ->
ets:delete_all_objects(Storage);
{store_next_packet_id, Id@1} ->
spoke_ets_ffi:update_next_id(Storage, Id@1);
{update_packet_state, Id@2, State} ->
ets:insert(Storage, {Id@2, State})
end.