Current section

Files

Jump to
outil src outil@help.erl
Raw

src/outil@help.erl

-module(outil@help).
-compile(no_auto_import).
-export([handle_error/2]).
-spec handle_error(outil@error:reason(), outil:command()) -> outil:return().
handle_error(Reason, Cmd) ->
case gleam@list:contains(erlang:element(6, Cmd), <<"--help"/utf8>>)
orelse gleam@list:contains(erlang:element(6, Cmd), <<"-h"/utf8>>) of
true ->
{help, usage(Cmd)};
false ->
{command_line_error, Reason, usage(Cmd)}
end.
-spec usage(outil:command()) -> binary().
usage(Cmd) ->
Args = begin
_pipe = erlang:element(4, Cmd),
_pipe@1 = gleam@list:map(
_pipe,
fun(Arg) ->
<<<<"<"/utf8, (erlang:element(2, Arg))/binary>>/binary,
">"/utf8>>
end
),
gleam@string:join(_pipe@1, <<" "/utf8>>)
end,
Args@1 = case Args of
<<""/utf8>> ->
<<""/utf8>>;
_ ->
<<" "/utf8, Args/binary>>
end,
Usage = <<<<"\n\nUsage: "/utf8, (erlang:element(2, Cmd))/binary>>/binary,
Args@1/binary>>,
Opts = begin
_pipe@2 = erlang:element(5, Cmd),
_pipe@3 = gleam@list:map(_pipe@2, fun describe_opt/1),
_pipe@4 = gleam@list:map(
_pipe@3,
fun(Opt) -> <<" "/utf8, Opt/binary>> end
),
gleam@string:join(_pipe@4, <<"\n"/utf8>>)
end,
Opts@1 = case Opts of
<<""/utf8>> ->
<<""/utf8>>;
_ ->
<<"\n\nOptions:\n"/utf8, Opts/binary>>
end,
<<<<<<<<(erlang:element(2, Cmd))/binary, " -- "/utf8>>/binary,
(erlang:element(3, Cmd))/binary>>/binary,
Usage/binary>>/binary,
Opts@1/binary>>.
-spec describe_opt(outil:opt()) -> binary().
describe_opt(Opt) ->
{opt, Long, Short, Desc, Value} = Opt,
Short@1 = gleam@option:map(
Short,
fun(S) -> <<<<"-"/utf8, S/binary>>/binary, ", "/utf8>> end
),
Short@2 = gleam@option:unwrap(Short@1, <<""/utf8>>),
Long@1 = <<"--"/utf8, Long/binary>>,
Typ = opt_type(Value),
Default = show_default(Value),
Meta = <<<<<<<<"("/utf8, Typ/binary>>/binary, ", default: "/utf8>>/binary,
Default/binary>>/binary,
")"/utf8>>,
<<<<<<<<<<Short@2/binary, Long@1/binary>>/binary, " "/utf8>>/binary,
Desc/binary>>/binary,
" "/utf8>>/binary,
Meta/binary>>.
-spec opt_type(outil:opt_value()) -> binary().
opt_type(Value) ->
case Value of
bool_opt ->
<<"bool"/utf8>>;
{float_opt, _} ->
<<"float"/utf8>>;
{int_opt, _} ->
<<"int"/utf8>>;
{string_opt, _} ->
<<"string"/utf8>>
end.
-spec show_default(outil:opt_value()) -> binary().
show_default(Value) ->
case Value of
bool_opt ->
<<"false"/utf8>>;
{float_opt, Default} ->
gleam@float:to_string(Default);
{int_opt, Default@1} ->
gleam@int:to_string(Default@1);
{string_opt, Default@2} ->
<<<<"\""/utf8, Default@2/binary>>/binary, "\""/utf8>>
end.