Skip to main content

src/oaisp@internal@argv.erl

-module(oaisp@internal@argv).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/oaisp/internal/argv.gleam").
-export([default_options/0, parse/1]).
-export_type([output/0, options/0, error/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.

?MODULEDOC(false).

-type output() :: {to_file, binary()} | to_stdout.

-type options() :: {options, output(), gleam@option:option(binary()), boolean()}.

-type error() :: {unknown_flag, binary()} | {missing_value, binary()}.

-file("src/oaisp/internal/argv.gleam", 25).
?DOC(false).
-spec default_options() -> options().
default_options() ->
    {options, {to_file, <<"./openapi.json"/utf8>>}, none, false}.

-file("src/oaisp/internal/argv.gleam", 52).
?DOC(false).
-spec parse_out(binary()) -> output().
parse_out(Value) ->
    case Value of
        <<"-"/utf8>> ->
            to_stdout;

        Path ->
            {to_file, Path}
    end.

-file("src/oaisp/internal/argv.gleam", 35).
?DOC(false).
-spec parse_with(list(binary()), options()) -> {ok, options()} |
    {error, error()}.
parse_with(Arguments, Options) ->
    case Arguments of
        [] ->
            {ok, Options};

        [<<"-o"/utf8>>, Value | Rest] ->
            parse_with(
                Rest,
                {options,
                    parse_out(Value),
                    erlang:element(3, Options),
                    erlang:element(4, Options)}
            );

        [<<"--out"/utf8>>, Value | Rest] ->
            parse_with(
                Rest,
                {options,
                    parse_out(Value),
                    erlang:element(3, Options),
                    erlang:element(4, Options)}
            );

        [<<"-o"/utf8>>] ->
            {error, {missing_value, <<"--out"/utf8>>}};

        [<<"--out"/utf8>>] ->
            {error, {missing_value, <<"--out"/utf8>>}};

        [<<"--package-interface"/utf8>>, Value@1 | Rest@1] ->
            parse_with(
                Rest@1,
                {options,
                    erlang:element(2, Options),
                    {some, Value@1},
                    erlang:element(4, Options)}
            );

        [<<"--package-interface"/utf8>>] ->
            {error, {missing_value, <<"--package-interface"/utf8>>}};

        [<<"--quiet"/utf8>> | Rest@2] ->
            parse_with(
                Rest@2,
                {options,
                    erlang:element(2, Options),
                    erlang:element(3, Options),
                    true}
            );

        [Flag | _] ->
            {error, {unknown_flag, Flag}}
    end.

-file("src/oaisp/internal/argv.gleam", 30).
?DOC(false).
-spec parse(list(binary())) -> {ok, options()} | {error, error()}.
parse(Arguments) ->
    parse_with(Arguments, default_options()).