Packages
oaspec
0.38.0
0.68.0
0.67.0
0.66.0
0.65.0
0.64.0
0.63.0
0.62.0
0.61.0
0.60.0
0.59.0
0.58.1
0.58.0
0.57.0
0.56.0
0.55.0
0.54.0
0.53.0
0.52.0
0.51.0
0.50.0
0.49.0
0.48.0
0.47.0
0.46.0
0.45.0
0.44.0
0.43.0
0.42.0
0.41.0
0.40.0
0.39.0
0.38.0
0.37.0
0.36.0
0.35.0
0.34.0
0.33.0
0.32.0
0.31.0
0.30.0
0.29.0
0.28.0
0.27.0
0.26.0
0.25.0
0.24.0
0.23.0
0.22.0
0.21.0
0.20.0
0.19.0
0.18.0
0.17.0
0.16.0
0.15.0
0.14.0
0.13.0
0.12.0
0.11.0
0.10.0
0.9.0
0.8.0
0.7.0
0.6.3
0.6.1
0.6.0
0.5.0
0.4.0
0.3.0
0.1.3
Generate Gleam code from OpenAPI 3.x specifications
Current section
Files
Jump to
Current section
Files
src/oaspec.erl
-module(oaspec).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/oaspec.gleam").
-export([normalize_argv/1, main/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.
-file("src/oaspec.gleam", 25).
-spec run_glint(list(binary())) -> nil.
run_glint(Arguments) ->
case glint:execute(oaspec@internal@cli:app(), Arguments) of
{error, Message} ->
gleam_stdlib:println_error(Message),
erlang:halt(1);
{ok, {help, Text}} ->
gleam_stdlib:println(Text);
{ok, {out, _}} ->
nil
end.
-file("src/oaspec.gleam", 67).
-spec is_value_long_flag(binary()) -> boolean().
is_value_long_flag(Arg) ->
gleam@bool:guard(
not gleam_stdlib:string_starts_with(Arg, <<"--"/utf8>>),
false,
fun() ->
Name = gleam@string:drop_start(Arg, 2),
gleam@list:contains(
[<<"config"/utf8>>, <<"mode"/utf8>>, <<"output"/utf8>>],
Name
)
end
).
-file("src/oaspec.gleam", 73).
-spec value_is_value(binary()) -> boolean().
value_is_value(Arg) ->
not gleam_stdlib:string_starts_with(Arg, <<"-"/utf8>>).
-file("src/oaspec.gleam", 53).
-spec do_normalize(list(binary()), list(binary())) -> list(binary()).
do_normalize(Arguments, Acc) ->
case Arguments of
[] ->
lists:reverse(Acc);
[Arg, Value | Rest] ->
gleam@bool:lazy_guard(
not (is_value_long_flag(Arg) andalso value_is_value(Value)),
fun() -> do_normalize([Value | Rest], [Arg | Acc]) end,
fun() ->
do_normalize(
Rest,
[<<<<Arg/binary, "="/utf8>>/binary, Value/binary>> |
Acc]
)
end
);
[Single | Rest@1] ->
do_normalize(Rest@1, [Single | Acc])
end.
-file("src/oaspec.gleam", 49).
?DOC(
" Translate `--name value` into `--name=value` for the value-bearing long\n"
" options listed in `cli.value_flag_names`. glint 1.x only accepts the\n"
" `=`-joined form, so users who reach for the GNU `--name value` convention\n"
" (or who copy commands from `git`/`gh`/`cargo` muscle memory) hit\n"
" `invalid flag '<name>'`. The normalisation happens before glint sees the\n"
" argv so existing `--name=value` callers are unaffected, and so unknown\n"
" flags still surface from glint with their original error.\n"
"\n"
" Other shapes are passed through untouched:\n"
" - `--name=value`: already canonical (the name has `=` in it, so no match)\n"
" - `--bool-flag`: not in the value-bearing list\n"
" - `--name -other`: a `-`-prefixed value is treated as the next flag, so\n"
" the original (broken) call is preserved and glint reports it as before\n"
).
-spec normalize_argv(list(binary())) -> list(binary()).
normalize_argv(Arguments) ->
do_normalize(Arguments, []).
-file("src/oaspec.gleam", 17).
?DOC(
" CLI entry point for the oaspec code generator.\n"
"\n"
" Routes diagnostic output to stderr while keeping requested output (such as\n"
" `--help` text) on stdout, following POSIX/CLIG conventions.\n"
).
-spec main() -> nil.
main() ->
Arguments = erlang:element(4, argv:load()),
case Arguments of
[<<"--version"/utf8>> | _] ->
gleam_stdlib:println(
<<"oaspec v"/utf8, (<<"0.38.0"/utf8>>)/binary>>
);
_ ->
run_glint(normalize_argv(Arguments))
end.