Packages
lustre
4.0.0-rc.2
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(NWQ, NWR) :: {step,
fun((env()) -> {env(), {ok, NWQ} | {error, NWR}})}.
-spec new(binary(), fun(() -> step(NWS, NWT))) -> step(NWS, NWT).
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(NWY, NWZ))) -> step(NWY, NWZ).
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(NXE, NXF), fun((NXF) -> NXI), fun((NXE) -> step(NXJ, NXI))) -> step(NXJ, NXI).
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, NXO} | {error, NXP},
fun((NXP) -> NXS),
fun((NXO) -> step(NXT, NXS))
) -> step(NXT, NXS).
'try'(Result, Map_error, Continue) ->
_pipe = {step, fun(Env) -> {Env, Result} end},
run(_pipe, Map_error, Continue).
-spec return(NXY) -> step(NXY, any()).
return(Value) ->
{step, fun(Env) -> {Env, {ok, Value}} end}.
-spec execute(step(NYC, NYD)) -> {ok, NYC} | {error, NYD}.
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.