Current section
Files
Jump to
Current section
Files
src/gilly.erl
-module(gilly).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/gilly.gleam").
-export([main/0]).
-export_type([args/0]).
-type args() :: {generate,
binary(),
gleam@option:option(binary()),
gilly@common:optionality(),
integer(),
boolean(),
list(binary())} |
version.
-file("src/gilly.gleam", 31).
-spec source_arg() -> clip@arg:arg(binary()).
source_arg() ->
_pipe = clip@arg:new(<<"source"/utf8>>),
clip@arg:help(
_pipe,
<<"Path to the OpenAPI specification file (JSON)"/utf8>>
).
-file("src/gilly.gleam", 36).
-spec output_opt() -> clip@opt:opt(gleam@option:option(binary())).
output_opt() ->
_pipe = clip@opt:new(<<"output"/utf8>>),
_pipe@1 = clip@opt:short(_pipe, <<"o"/utf8>>),
_pipe@2 = clip@opt:help(
_pipe@1,
<<"Output file path (prints to stdout if omitted)"/utf8>>
),
_pipe@3 = clip@opt:map(_pipe@2, fun(Field@0) -> {some, Field@0} end),
clip@opt:default(_pipe@3, none).
-file("src/gilly.gleam", 44).
-spec optionality_opt() -> clip@opt:opt(gilly@common:optionality()).
optionality_opt() ->
_pipe = clip@opt:new(<<"optionality"/utf8>>),
_pipe@1 = clip@opt:help(
_pipe,
<<"How to determine optional fields:
- RequiredOnly: Only fields that are required in the OpenAPI spec are non-optional (default)
- NullableOnly: Fields are optional if they are marked `nullable: true`
- RequiredAndNullable: Fields are optional if they are either not required or marked `nullable: true`
"/utf8>>
),
_pipe@2 = clip@opt:try_map(_pipe@1, fun(S) -> case S of
<<"RequiredOnly"/utf8>> ->
{ok, required_only};
<<"NullableOnly"/utf8>> ->
{ok, nullable_only};
<<"RequiredAndNullable"/utf8>> ->
{ok, required_and_nullable};
_ ->
{error,
<<<<"Invalid optionality: '"/utf8, S/binary>>/binary,
"'. Must be one of: RequiredOnly, NullableOnly, RequiredAndNullable"/utf8>>}
end end),
clip@opt:default(_pipe@2, required_only).
-file("src/gilly.gleam", 69).
-spec indent_opt() -> clip@opt:opt(integer()).
indent_opt() ->
_pipe = clip@opt:new(<<"indent"/utf8>>),
_pipe@1 = clip@opt:help(
_pipe,
<<"Number of spaces for indentation (default: 2)"/utf8>>
),
_pipe@2 = clip@opt:int(_pipe@1),
clip@opt:default(_pipe@2, 2).
-file("src/gilly.gleam", 76).
-spec optional_query_params_flag() -> clip@flag:flag().
optional_query_params_flag() ->
_pipe = clip@flag:new(<<"optional-query-params"/utf8>>),
_pipe@1 = clip@flag:short(_pipe, <<"q"/utf8>>),
clip@flag:help(
_pipe@1,
<<"Make query parameters optional (default: false)"/utf8>>
).
-file("src/gilly.gleam", 82).
-spec client_default_parameters_opt() -> clip@opt:opt(list(binary())).
client_default_parameters_opt() ->
_pipe = clip@opt:new(<<"client-default-parameters"/utf8>>),
_pipe@1 = clip@opt:help(
_pipe,
<<"Comma-separated list of parameter names to promote to the Client type as defaults (e.g. \"region\")"/utf8>>
),
_pipe@4 = clip@opt:map(
_pipe@1,
fun(S) -> _pipe@2 = gleam@string:split(S, <<","/utf8>>),
_pipe@3 = gleam@list:map(_pipe@2, fun gleam@string:trim/1),
gleam@list:filter(_pipe@3, fun(S@1) -> S@1 /= <<""/utf8>> end) end
),
clip@opt:default(_pipe@4, []).
-file("src/gilly.gleam", 95).
-spec generate_command() -> clip:command(args()).
generate_command() ->
_pipe = clip:command(
begin
clip:parameter(
fun(Source) ->
clip:parameter(
fun(Output) ->
clip:parameter(
fun(Optionality) ->
clip:parameter(
fun(Indent) ->
clip:parameter(
fun(Optional_query_params) ->
clip:parameter(
fun(
Client_default_parameters
) ->
{generate,
Source,
Output,
Optionality,
Indent,
Optional_query_params,
Client_default_parameters}
end
)
end
)
end
)
end
)
end
)
end
)
end
),
_pipe@1 = clip:arg(_pipe, source_arg()),
_pipe@2 = clip:opt(_pipe@1, output_opt()),
_pipe@3 = clip:opt(_pipe@2, optionality_opt()),
_pipe@4 = clip:opt(_pipe@3, indent_opt()),
_pipe@5 = clip:flag(_pipe@4, optional_query_params_flag()),
_pipe@6 = clip:opt(_pipe@5, client_default_parameters_opt()),
clip:help(
_pipe@6,
clip@help:simple(
<<"generate"/utf8>>,
<<"Generate code from an OpenAPI specification"/utf8>>
)
).
-file("src/gilly.gleam", 124).
-spec version_command() -> clip:command(args()).
version_command() ->
_pipe = clip:return(version),
clip:help(
_pipe,
clip@help:simple(
<<"version"/utf8>>,
<<"Print the version of Gilly"/utf8>>
)
).
-file("src/gilly.gleam", 129).
-spec command() -> clip:command(args()).
command() ->
clip:subcommands_with_default(
[{<<"generate"/utf8>>, generate_command()},
{<<"version"/utf8>>, version_command()}],
generate_command()
).
-file("src/gilly.gleam", 154).
-spec run(args()) -> nil.
run(Args) ->
case Args of
version ->
gleam_stdlib:println(<<"Gilly version "/utf8, "0.3.1"/utf8>>);
{generate,
Source,
Output,
Optionality,
Indent,
Optional_query_params,
Client_default_parameters} ->
Builder = begin
_pipe = gilly@gilly:new(),
_pipe@1 = gilly@gilly:with_optionality(_pipe, Optionality),
_pipe@2 = gilly@gilly:with_indent(_pipe@1, Indent),
_pipe@3 = gilly@gilly:with_optional_query_params(
_pipe@2,
Optional_query_params
),
gilly@gilly:with_client_default_parameters(
_pipe@3,
Client_default_parameters
)
end,
case gilly@gilly:generate_code_from_file(Builder, Source) of
{ok, Code} ->
case Output of
{some, Path} ->
_ = begin
_pipe@4 = simplifile:write(Path, Code),
gleam@result:map_error(
_pipe@4,
fun(E) ->
gleam_stdlib:println_error(
<<"Error writing file: "/utf8,
(simplifile:describe_error(E))/binary>>
)
end
)
end,
nil;
none ->
gleam_stdlib:println(Code)
end;
{error, E@1} ->
gleam_stdlib:println_error(
<<"Error generating code: "/utf8,
(gilly@error:describe_error(E@1))/binary>>
)
end
end.
-file("src/gilly.gleam", 139).
-spec main() -> nil.
main() ->
Result = begin
_pipe = command(),
_pipe@1 = clip:help(
_pipe,
clip@help:simple(
<<"gilly"/utf8>>,
<<"✨ Generate Gleam SDKs from OpenAPI specifications."/utf8>>
)
),
clip:run(_pipe@1, erlang:element(4, argv:load()))
end,
case Result of
{error, E} ->
gleam_stdlib:println_error(E);
{ok, Args} ->
run(Args)
end.