Packages

✨ Generate Gleam SDKs from OpenAPI specifications

Current section

Files

Jump to
gilly src gilly@internal@gilly.erl
Raw

src/gilly@internal@gilly.erl

-module(gilly@internal@gilly).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/gilly/internal/gilly.gleam").
-export([new/0, with_optionality/2, with_indent/2, with_optional_query_params/2, with_version/2, generate_code/2, generate_code_from_file/2]).
-export_type([builder/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).
-opaque builder() :: {builder,
gilly@internal@codegen:optionality(),
integer(),
boolean(),
binary()}.
-file("src/gilly/internal/gilly.gleam", 20).
?DOC(false).
-spec new() -> builder().
new() ->
{builder, required_only, 2, false, <<"development"/utf8>>}.
-file("src/gilly/internal/gilly.gleam", 29).
?DOC(false).
-spec with_optionality(builder(), gilly@internal@codegen:optionality()) -> builder().
with_optionality(Builder, Optionality) ->
{builder,
Optionality,
erlang:element(3, Builder),
erlang:element(4, Builder),
erlang:element(5, Builder)}.
-file("src/gilly/internal/gilly.gleam", 33).
?DOC(false).
-spec with_indent(builder(), integer()) -> builder().
with_indent(Builder, Indent) ->
{builder,
erlang:element(2, Builder),
Indent,
erlang:element(4, Builder),
erlang:element(5, Builder)}.
-file("src/gilly/internal/gilly.gleam", 37).
?DOC(false).
-spec with_optional_query_params(builder(), boolean()) -> builder().
with_optional_query_params(Builder, Optional_query_params) ->
{builder,
erlang:element(2, Builder),
erlang:element(3, Builder),
Optional_query_params,
erlang:element(5, Builder)}.
-file("src/gilly/internal/gilly.gleam", 44).
?DOC(false).
-spec with_version(builder(), binary()) -> builder().
with_version(Builder, Version) ->
{builder,
erlang:element(2, Builder),
erlang:element(3, Builder),
erlang:element(4, Builder),
Version}.
-file("src/gilly/internal/gilly.gleam", 105).
?DOC(false).
-spec generate_code(builder(), gilly@openapi@openapi:open_a_p_i()) -> binary().
generate_code(Builder, Spec) ->
Config = {config,
erlang:element(2, Builder),
erlang:element(3, Builder),
erlang:element(4, Builder)},
gilly@internal@codegen:generate(Spec, Config).
-file("src/gilly/internal/gilly.gleam", 77).
?DOC(false).
-spec is_supported_file_type(binary()) -> boolean().
is_supported_file_type(Source) ->
Extension = begin
_pipe = gleam@string:split(Source, <<"."/utf8>>),
_pipe@1 = gleam@list:last(_pipe),
gleam@result:unwrap(_pipe@1, <<""/utf8>>)
end,
gleam@list:contains([<<"json"/utf8>>], Extension).
-file("src/gilly/internal/gilly.gleam", 68).
?DOC(false).
-spec read_file(binary()) -> {ok, binary()} |
{error, gilly@internal@error:error()}.
read_file(Source) ->
gleam@bool:guard(
not is_supported_file_type(Source),
{error, {unsupported_file_type, Source, [<<"json"/utf8>>]}},
fun() -> _pipe = simplifile:read(Source),
gleam@result:map_error(
_pipe,
fun(_capture) -> {reading_file, Source, _capture} end
) end
).
-file("src/gilly/internal/gilly.gleam", 98).
?DOC(false).
-spec generate_header(binary(), binary()) -> binary().
generate_header(Version, Source) ->
_pipe = <<"// Code generated by Gilly (<version>) from OpenAPI specification at '<source_path>'. DO NOT EDIT.
// To regenerate, run: gilly <path_to_openapi_spec.json>
"/utf8>>,
_pipe@1 = gleam@string:replace(_pipe, <<"<version>"/utf8>>, Version),
gleam@string:replace(_pipe@1, <<"<source_path>"/utf8>>, Source).
-file("src/gilly/internal/gilly.gleam", 48).
?DOC(false).
-spec generate_code_from_file(builder(), binary()) -> {ok, binary()} |
{error, gilly@internal@error:error()}.
generate_code_from_file(Builder, Source) ->
gleam@result:'try'(
read_file(Source),
fun(Content) ->
gleam@result:'try'(
begin
_pipe = gilly@openapi@openapi:from_json_string(Content),
gleam@result:map_error(
_pipe,
fun(_capture) ->
{parsing_open_a_p_i, Source, _capture}
end
)
end,
fun(Spec) ->
Code = generate_code(Builder, Spec),
Header = generate_header(erlang:element(5, Builder), Source),
{ok, <<<<Header/binary, "\n\n"/utf8>>/binary, Code/binary>>}
end
)
end
).