src/glipt@cmd@run.erl

-module(glipt@cmd@run).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/glipt/cmd/run.gleam").
-export([execute/1]).

-file("src/glipt/cmd/run.gleam", 35).
-spec parse_args(list(binary()), glipt@target:target(), binary()) -> {glipt@target:target(),
    binary(),
    binary(),
    list(binary())}.
parse_args(Args, T, Func) ->
    case Args of
        [<<"--target"/utf8>>, <<"erlang"/utf8>> | Rest] ->
            parse_args(Rest, erlang, Func);

        [<<"--target"/utf8>>, <<"javascript"/utf8>> | Rest@1] ->
            parse_args(Rest@1, java_script, Func);

        [<<"-f"/utf8>>, F | Rest@2] ->
            parse_args(Rest@2, T, F);

        [File, <<"--"/utf8>> | Script_args] ->
            {T, Func, File, Script_args};

        [File@1 | Script_args@1] ->
            {T, Func, File@1, Script_args@1};

        _ ->
            {T, Func, <<""/utf8>>, []}
    end.

-file("src/glipt/cmd/run.gleam", 6).
-spec execute(list(binary())) -> nil.
execute(Args) ->
    {T, Func, File, Script_args} = parse_args(Args, erlang, <<"main"/utf8>>),
    case File of
        <<""/utf8>> ->
            gleam_stdlib:println_error(
                <<"Error: no script file specified"/utf8>>
            ),
            gleam_stdlib:println_error(
                <<"Usage: glipt run [--target erlang|javascript] [-f function] <file.gleam> [-- args...]"/utf8>>
            );

        P ->
            Opts = {run_options, P, T, Func, Script_args},
            case glipt@runner:run(Opts) of
                {ok, Output} ->
                    gleam_stdlib:print(Output);

                {error, {file_error, E}} ->
                    gleam_stdlib:println_error(
                        <<"File error: "/utf8,
                            (gleam@string:inspect(E))/binary>>
                    );

                {error, {build_error, Msg}} ->
                    gleam_stdlib:println_error(
                        <<"Build error:\n"/utf8, Msg/binary>>
                    );

                {error, {run_error, Msg@1}} ->
                    gleam_stdlib:println_error(
                        <<"Run error:\n"/utf8, Msg@1/binary>>
                    )
            end
    end.