Current section
Files
Jump to
Current section
Files
src/lily@store.erl
-module(lily@store).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/lily/store.gleam").
-export([apply/2, get_model/1, new/2, subscribe/2, unsubscribe/2, dispatch/2, notify/1, send/2]).
-export_type([store/2]).
-type store(FNX, FNY) :: {store,
FNX,
fun((FNX, FNY) -> FNX),
gleam@dict:dict(integer(), fun((FNX) -> nil)),
integer()}.
-file("src/lily/store.gleam", 19).
-spec apply(store(FNZ, FOA), FOA) -> store(FNZ, FOA).
apply(Store, Msg) ->
New_model = (erlang:element(3, Store))(erlang:element(2, Store), Msg),
{store,
New_model,
erlang:element(3, Store),
erlang:element(4, Store),
erlang:element(5, Store)}.
-file("src/lily/store.gleam", 34).
-spec get_model(store(FOL, any())) -> FOL.
get_model(Store) ->
erlang:element(2, Store).
-file("src/lily/store.gleam", 38).
-spec new(FOP, fun((FOP, FOQ) -> FOP)) -> store(FOP, FOQ).
new(Model, Updater) ->
{store, Model, Updater, maps:new(), 0}.
-file("src/lily/store.gleam", 54).
-spec subscribe(store(FPD, FPE), fun((FPD) -> nil)) -> {store(FPD, FPE),
integer()}.
subscribe(Store, Handler) ->
Id = erlang:element(5, Store),
Updated_handlers = gleam@dict:insert(erlang:element(4, Store), Id, Handler),
Updated_next_id = erlang:element(5, Store) + 1,
Updated_store = {store,
erlang:element(2, Store),
erlang:element(3, Store),
Updated_handlers,
Updated_next_id},
{Updated_store, Id}.
-file("src/lily/store.gleam", 67).
-spec unsubscribe(store(FPJ, FPK), integer()) -> store(FPJ, FPK).
unsubscribe(Store, Id) ->
Updated_handlers = gleam@dict:delete(erlang:element(4, Store), Id),
{store,
erlang:element(2, Store),
erlang:element(3, Store),
Updated_handlers,
erlang:element(5, Store)}.
-file("src/lily/store.gleam", 75).
-spec notify_handlers(store(any(), any())) -> nil.
notify_handlers(Store) ->
_pipe = maps:values(erlang:element(4, Store)),
gleam@list:each(
_pipe,
fun(Handler) -> Handler(erlang:element(2, Store)) end
).
-file("src/lily/store.gleam", 24).
-spec dispatch(store(FOF, FOG), FOF) -> store(FOF, FOG).
dispatch(Store, Model) ->
New_store = {store,
Model,
erlang:element(3, Store),
erlang:element(4, Store),
erlang:element(5, Store)},
notify_handlers(New_store),
New_store.
-file("src/lily/store.gleam", 45).
-spec notify(store(any(), any())) -> nil.
notify(Store) ->
notify_handlers(Store).
-file("src/lily/store.gleam", 49).
-spec send(store(FOX, FOY), FOY) -> store(FOX, FOY).
send(Store, Msg) ->
New_model = (erlang:element(3, Store))(erlang:element(2, Store), Msg),
dispatch(Store, New_model).