Packages
lustre
4.0.0-rc1
5.7.1
5.7.0
5.6.0
5.5.2
5.5.1
5.5.0
5.4.0
5.3.5
5.3.4
5.3.3
5.3.2
5.3.1
5.3.0
5.2.1
5.2.0
5.1.1
5.1.0
5.0.3
5.0.2
5.0.1
5.0.0
4.6.4
4.6.3
4.6.2
4.6.1
4.6.0
4.5.1
4.5.0
4.4.4
4.4.3
4.4.1
4.4.0
4.3.6
4.3.5
4.3.4
4.3.3
4.3.2
4.3.1
4.3.0
4.2.6
4.2.5
4.2.4
4.2.3
4.2.2
4.2.1
4.2.0
4.1.8
4.1.7
4.1.6
4.1.5
4.1.4
4.1.3
4.1.2
4.1.1
4.1.0
4.0.0
4.0.0-rc1
4.0.0-rc.2
3.1.4
3.1.3
3.1.2
3.1.1
3.1.0
3.0.12
3.0.11
3.0.10
3.0.9
3.0.8
3.0.7
3.0.6
3.0.5
3.0.4
3.0.3
3.0.2
3.0.1
3.0.0
3.0.0-rc.8
3.0.0-rc.7
3.0.0-rc.6
3.0.0-rc.5
3.0.0-rc.4
3.0.0-rc.3
3.0.0-rc.2
3.0.0-rc.1
2.0.1
2.0.0
1.3.0
1.2.0
1.1.0
1.0.0
Create HTML templates, single page applications, Web Components, and real-time server components in Gleam!
Current section
Files
Jump to
Current section
Files
src/lustre@cli@step.erl
-module(lustre@cli@step).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-export([new/2, done/2, run/3, 'try'/3, return/1, execute/1]).
-export_type([spinner_status/0, env/0, step/2]).
-type spinner_status() :: {running, binary()} | stopped.
-type env() :: {env, spinner:spinner(), spinner_status()}.
-opaque step(QDF, QDG) :: {step,
fun((env()) -> {env(), {ok, QDF} | {error, QDG}})}.
-spec new(binary(), fun(() -> step(QDH, QDI))) -> step(QDH, QDI).
new(Message, Continue) ->
{step,
fun(_use0) ->
{env, Spinner, Spinner_status} = _use0,
case Spinner_status of
{running, _} ->
spinner:set_text(Spinner, Message),
(erlang:element(2, Continue()))(
{env, Spinner, {running, Message}}
);
stopped ->
New_spinner = begin
_pipe = spinner:new(Message),
_pipe@1 = spinner:with_frames(
_pipe,
[<<"⠋"/utf8>>,
<<"⠙"/utf8>>,
<<"⠹"/utf8>>,
<<"⠸"/utf8>>,
<<"⠼"/utf8>>,
<<"⠴"/utf8>>,
<<"⠦"/utf8>>,
<<"⠧"/utf8>>,
<<"⠇"/utf8>>,
<<"⠏"/utf8>>]
),
spinner:start(_pipe@1)
end,
(erlang:element(2, Continue()))(
{env, New_spinner, {running, Message}}
)
end
end}.
-spec done(binary(), fun(() -> step(QDN, QDO))) -> step(QDN, QDO).
done(Message, Continue) ->
{step,
fun(_use0) ->
{env, Spinner, Spinner_status} = _use0,
case Spinner_status of
{running, _} ->
spinner:stop(Spinner);
stopped ->
nil
end,
gleam@io:println(gleam_community@ansi:green(Message)),
(erlang:element(2, Continue()))({env, Spinner, stopped})
end}.
-spec run(step(QDT, QDU), fun((QDU) -> QDX), fun((QDT) -> step(QDY, QDX))) -> step(QDY, QDX).
run(Step, Map_error, Continue) ->
{step, fun(Env) -> case (erlang:element(2, Step))(Env) of
{New_env, {ok, Res}} ->
(erlang:element(2, Continue(Res)))(New_env);
{New_env@1, {error, E}} ->
{New_env@1, {error, Map_error(E)}}
end end}.
-spec 'try'(
{ok, QED} | {error, QEE},
fun((QEE) -> QEH),
fun((QED) -> step(QEI, QEH))
) -> step(QEI, QEH).
'try'(Result, Map_error, Continue) ->
_pipe = {step, fun(Env) -> {Env, Result} end},
run(_pipe, Map_error, Continue).
-spec return(QEN) -> step(QEN, any()).
return(Value) ->
{step, fun(Env) -> {Env, {ok, Value}} end}.
-spec execute(step(QER, QES)) -> {ok, QER} | {error, QES}.
execute(Step) ->
Initial_spinner = begin
_pipe = spinner:new(<<""/utf8>>),
_pipe@1 = spinner:with_frames(
_pipe,
[<<"⠋"/utf8>>,
<<"⠙"/utf8>>,
<<"⠹"/utf8>>,
<<"⠸"/utf8>>,
<<"⠼"/utf8>>,
<<"⠴"/utf8>>,
<<"⠦"/utf8>>,
<<"⠧"/utf8>>,
<<"⠇"/utf8>>,
<<"⠏"/utf8>>]
),
spinner:start(_pipe@1)
end,
{{env, Spinner, Status}, Res} = (erlang:element(2, Step))(
{env, Initial_spinner, {running, <<""/utf8>>}}
),
case Status of
{running, Message} ->
spinner:stop(Spinner),
gleam@io:println(
<<"❌ "/utf8, (gleam_community@ansi:red(Message))/binary>>
);
stopped ->
nil
end,
Res.