-module(outil@help). -compile(no_auto_import). -export([handle_error/2]). -spec handle_error(outil@error:reason(), outil:command()) -> outil:command_return(any()). 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>>, <<<<<<<<<>/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.