Packages

Dev Tools for Eensy (Gleam framework for microprocessor-based embedded systems).

Current section

Files

Jump to
eensy_dev_tools src eensy_dev_tools@cli.erl
Raw

src/eensy_dev_tools@cli.erl

-module(eensy_dev_tools@cli).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-export([run/2, return/1, throw/1, from_result/1, do/2, in/1, map/2, 'try'/2, log/2, success/2, notify/2, mute/0, unmute/0, get_config/0, get_name/0, get_flags/0, get_config_value/5, get_int/4, get_string/4, get_bool/4]).
-export_type([cli/1, env/0, spinner_status/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.
-opaque cli(MUO) :: {cli,
fun((env()) -> {env(),
{ok, MUO} | {error, eensy_dev_tools@error:error()}})}.
-type env() :: {env,
boolean(),
spinner_status(),
glint:flags(),
eensy_dev_tools@project:config()}.
-type spinner_status() :: {running, spinner:spinner(), binary()} | paused.
-file("src/eensy_dev_tools/cli.gleam", 35).
?DOC("\n").
-spec run(cli(MUP), glint:flags()) -> {ok, MUP} |
{error, eensy_dev_tools@error:error()}.
run(Step, Flags) ->
gleam@result:'try'(
eensy_dev_tools@project:config(),
fun(Config) ->
Env = {env, false, paused, Flags, Config},
{Env@1, Result} = (erlang:element(2, Step))(Env),
case erlang:element(3, Env@1) of
{running, Spinner, _} ->
spinner:stop(Spinner);
paused ->
nil
end,
case {Result, erlang:element(3, Env@1)} of
{{error, _}, {running, _, Message}} ->
gleam_stdlib:println(
<<"❌ "/utf8,
(gleam_community@ansi:red(Message))/binary>>
);
{{error, _}, _} ->
nil;
{{ok, _}, _} ->
nil
end,
Result
end
).
-file("src/eensy_dev_tools/cli.gleam", 59).
?DOC("\n").
-spec return(MUT) -> cli(MUT).
return(Value) ->
{cli, fun(Env) -> {Env, {ok, Value}} end}.
-file("src/eensy_dev_tools/cli.gleam", 67).
?DOC("\n").
-spec throw(eensy_dev_tools@error:error()) -> cli(any()).
throw(Error) ->
{cli, fun(Env) -> {Env, {error, Error}} end}.
-file("src/eensy_dev_tools/cli.gleam", 73).
-spec from_result({ok, MUX} | {error, eensy_dev_tools@error:error()}) -> cli(MUX).
from_result(Result) ->
{cli, fun(Env) -> {Env, Result} end}.
-file("src/eensy_dev_tools/cli.gleam", 83).
?DOC("\n").
-spec do(cli(MVB), fun((MVB) -> cli(MVD))) -> cli(MVD).
do(Step, Next) ->
{cli,
fun(Env) ->
{Env@1, Result} = (erlang:element(2, Step))(Env),
case Result of
{ok, Value} ->
(erlang:element(2, Next(Value)))(Env@1);
{error, Error} ->
case erlang:element(3, Env@1) of
{running, Spinner, _} ->
spinner:stop(Spinner);
paused ->
nil
end,
{Env@1, {error, Error}}
end
end}.
-file("src/eensy_dev_tools/cli.gleam", 100).
-spec in(fun(() -> MVG)) -> cli(MVG).
in(Value) ->
{cli, fun(Env) -> {Env, {ok, Value()}} end}.
-file("src/eensy_dev_tools/cli.gleam", 106).
-spec map(cli(MVI), fun((MVI) -> MVK)) -> cli(MVK).
map(Step, Next) ->
{cli,
fun(Env) ->
{Env@1, Result} = (erlang:element(2, Step))(Env),
Result@1 = gleam@result:map(Result, Next),
{Env@1, Result@1}
end}.
-file("src/eensy_dev_tools/cli.gleam", 116).
?DOC("\n").
-spec 'try'(
{ok, MVM} | {error, eensy_dev_tools@error:error()},
fun((MVM) -> cli(MVP))
) -> cli(MVP).
'try'(Result, Next) ->
{cli, fun(Env) -> case Result of
{ok, A} ->
(erlang:element(2, Next(A)))(Env);
{error, Error} ->
case erlang:element(3, Env) of
{running, Spinner, _} ->
spinner:stop(Spinner);
paused ->
nil
end,
{Env, {error, Error}}
end end}.
-file("src/eensy_dev_tools/cli.gleam", 136).
?DOC("\n").
-spec log(binary(), fun(() -> cli(MVS))) -> cli(MVS).
log(Message, Next) ->
{cli,
fun(Env) ->
Env@1 = case erlang:element(2, Env) of
true ->
Env;
false ->
_record = Env,
{env,
erlang:element(2, _record),
case erlang:element(3, Env) of
paused ->
{running,
begin
_pipe = spinner:new(Message),
_pipe@1 = spinner:with_colour(
_pipe,
fun gleam_community@ansi:magenta/1
),
_pipe@2 = spinner:with_frames(
_pipe@1,
[<<"⠋"/utf8>>,
<<"⠙"/utf8>>,
<<"⠹"/utf8>>,
<<"⠸"/utf8>>,
<<"⠼"/utf8>>,
<<"⠴"/utf8>>,
<<"⠦"/utf8>>,
<<"⠧"/utf8>>,
<<"⠇"/utf8>>,
<<"⠏"/utf8>>]
),
spinner:start(_pipe@2)
end,
Message};
{running, Spinner, _} ->
spinner:set_text(Spinner, Message),
{running, Spinner, Message}
end,
erlang:element(4, _record),
erlang:element(5, _record)}
end,
(erlang:element(2, Next()))(Env@1)
end}.
-file("src/eensy_dev_tools/cli.gleam", 161).
-spec success(binary(), fun(() -> cli(MVV))) -> cli(MVV).
success(Message, Next) ->
{cli,
fun(Env) ->
Env@1 = begin
_record = Env,
{env, erlang:element(2, _record), case erlang:element(3, Env) of
paused ->
paused;
{running, Spinner, _} ->
spinner:stop(Spinner),
paused
end, erlang:element(4, _record), erlang:element(5, _record)}
end,
case erlang:element(2, Env@1) of
true ->
nil;
false ->
gleam_stdlib:println(
<<"✅ "/utf8,
(gleam_community@ansi:green(Message))/binary>>
)
end,
(erlang:element(2, Next()))(Env@1)
end}.
-file("src/eensy_dev_tools/cli.gleam", 180).
-spec notify(binary(), fun(() -> cli(MVY))) -> cli(MVY).
notify(Message, Next) ->
{cli,
fun(Env) ->
Env@1 = begin
_record = Env,
{env, erlang:element(2, _record), case erlang:element(3, Env) of
paused ->
paused;
{running, Spinner, _} ->
spinner:stop(Spinner),
paused
end, erlang:element(4, _record), erlang:element(5, _record)}
end,
case erlang:element(2, Env@1) of
true ->
nil;
false ->
gleam_stdlib:println(
gleam_community@ansi:bright_cyan(Message)
)
end,
(erlang:element(2, Next()))(Env@1)
end}.
-file("src/eensy_dev_tools/cli.gleam", 199).
-spec mute() -> cli(nil).
mute() ->
{cli,
fun(Env) ->
{begin
_record = Env,
{env,
true,
erlang:element(3, _record),
erlang:element(4, _record),
erlang:element(5, _record)}
end,
{ok, nil}}
end}.
-file("src/eensy_dev_tools/cli.gleam", 205).
-spec unmute() -> cli(nil).
unmute() ->
{cli,
fun(Env) ->
{begin
_record = Env,
{env,
false,
erlang:element(3, _record),
erlang:element(4, _record),
erlang:element(5, _record)}
end,
{ok, nil}}
end}.
-file("src/eensy_dev_tools/cli.gleam", 213).
-spec get_config() -> cli(eensy_dev_tools@project:config()).
get_config() ->
{cli, fun(Env) -> {Env, {ok, erlang:element(5, Env)}} end}.
-file("src/eensy_dev_tools/cli.gleam", 219).
-spec get_name() -> cli(binary()).
get_name() ->
{cli,
fun(Env) -> {Env, {ok, erlang:element(2, erlang:element(5, Env))}} end}.
-file("src/eensy_dev_tools/cli.gleam", 227).
-spec get_flags() -> cli(glint:flags()).
get_flags() ->
{cli, fun(Env) -> {Env, {ok, erlang:element(4, Env)}} end}.
-file("src/eensy_dev_tools/cli.gleam", 233).
-spec get_config_value(
binary(),
MWG,
list(binary()),
fun((gleam@dict:dict(binary(), tom:toml()), list(binary())) -> {ok, MWG} |
{error, any()}),
fun((glint:flags()) -> {ok, MWG} | {error, any()})
) -> cli(MWG).
get_config_value(Name, Fallback, Namespace, Toml, Flag) ->
{cli,
fun(Env) ->
Toml_path = gleam@list:flatten(
[[<<"eensy"/utf8>>], Namespace, [Name]]
),
Value = begin
_pipe = gleam@result:'or'(
gleam@result:replace_error(
Flag(erlang:element(4, Env)),
nil
),
gleam@result:replace_error(
Toml(
erlang:element(4, erlang:element(5, Env)),
Toml_path
),
nil
)
),
gleam@result:unwrap(_pipe, Fallback)
end,
{Env, {ok, Value}}
end}.
-file("src/eensy_dev_tools/cli.gleam", 253).
-spec get_int(
binary(),
integer(),
list(binary()),
fun((glint:flags()) -> {ok, integer()} | {error, any()})
) -> cli(integer()).
get_int(Name, Fallback, Namespace, Flag) ->
get_config_value(Name, Fallback, Namespace, fun tom:get_int/2, Flag).
-file("src/eensy_dev_tools/cli.gleam", 262).
-spec get_string(
binary(),
binary(),
list(binary()),
fun((glint:flags()) -> {ok, binary()} | {error, any()})
) -> cli(binary()).
get_string(Name, Fallback, Namespace, Flag) ->
get_config_value(Name, Fallback, Namespace, fun tom:get_string/2, Flag).
-file("src/eensy_dev_tools/cli.gleam", 271).
-spec get_bool(
binary(),
boolean(),
list(binary()),
fun((glint:flags()) -> {ok, boolean()} | {error, any()})
) -> cli(boolean()).
get_bool(Name, Fallback, Namespace, Flag) ->
get_config_value(Name, Fallback, Namespace, fun tom:get_bool/2, Flag).