Packages

A simple package for modelling optimistic ui updates.

Current section

Files

Jump to
optimist src optimist.erl
Raw

src/optimist.erl

-module(optimist).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-export([from/1, is_resolved/1, is_pending/1, push/2, update/2, force/1, revert/1, resolve/2, 'try'/3, unwrap/1]).
-export_type([optimistic/1]).
-opaque optimistic(FVY) :: {resolved, FVY} | {pending, FVY, FVY}.
-file("/home/runner/work/optimist/optimist/src/optimist.gleam", 28).
-spec from(FVZ) -> optimistic(FVZ).
from(Value) ->
{resolved, Value}.
-file("/home/runner/work/optimist/optimist/src/optimist.gleam", 42).
-spec is_resolved(optimistic(any())) -> boolean().
is_resolved(Optimistic) ->
case Optimistic of
{resolved, _} ->
true;
{pending, _, _} ->
false
end.
-file("/home/runner/work/optimist/optimist/src/optimist.gleam", 57).
-spec is_pending(optimistic(any())) -> boolean().
is_pending(Optimistic) ->
case Optimistic of
{resolved, _} ->
false;
{pending, _, _} ->
true
end.
-file("/home/runner/work/optimist/optimist/src/optimist.gleam", 122).
-spec push(optimistic(FWF), FWF) -> optimistic(FWF).
push(Optimistic, Value) ->
case Optimistic of
{resolved, Fallback} ->
{pending, Value, Fallback};
{pending, _, Fallback@1} ->
{pending, Value, Fallback@1}
end.
-file("/home/runner/work/optimist/optimist/src/optimist.gleam", 185).
-spec update(optimistic(FWI), fun((FWI) -> FWI)) -> optimistic(FWI).
update(Optimistic, F) ->
case Optimistic of
{resolved, Fallback} ->
{pending, F(Fallback), Fallback};
{pending, _, Fallback@1} ->
{pending, F(Fallback@1), Fallback@1}
end.
-file("/home/runner/work/optimist/optimist/src/optimist.gleam", 212).
-spec force(optimistic(FWL)) -> optimistic(FWL).
force(Optimistic) ->
case Optimistic of
{resolved, _} ->
Optimistic;
{pending, Value, _} ->
{resolved, Value}
end.
-file("/home/runner/work/optimist/optimist/src/optimist.gleam", 239).
-spec revert(optimistic(FWO)) -> optimistic(FWO).
revert(Optimistic) ->
case Optimistic of
{resolved, _} ->
Optimistic;
{pending, _, Fallback} ->
{resolved, Fallback}
end.
-file("/home/runner/work/optimist/optimist/src/optimist.gleam", 294).
-spec resolve(optimistic(FWR), {ok, FWR} | {error, any()}) -> optimistic(FWR).
resolve(Optimistic, Result) ->
case Result of
{ok, Value} ->
{resolved, Value};
{error, _} ->
revert(Optimistic)
end.
-file("/home/runner/work/optimist/optimist/src/optimist.gleam", 343).
-spec 'try'(optimistic(FWX), {ok, FWZ} | {error, any()}, fun((FWX, FWZ) -> FWX)) -> optimistic(FWX).
'try'(Optimistic, Result, F) ->
case {Result, Optimistic} of
{{ok, A}, {resolved, Value}} ->
{resolved, F(Value, A)};
{{ok, A@1}, {pending, _, Fallback}} ->
{resolved, F(Fallback, A@1)};
{{error, _}, _} ->
revert(Optimistic)
end.
-file("/home/runner/work/optimist/optimist/src/optimist.gleam", 359).
-spec unwrap(optimistic(FXE)) -> FXE.
unwrap(Optimistic) ->
erlang:element(2, Optimistic).