Packages

OpenAPI code generation for Gleam — parse specs, generate types, routes, clients, and React Query/SWR hooks

Current section

Files

Jump to
nori src nori@builder@document_builder.erl
Raw

src/nori@builder@document_builder.erl

-module(nori@builder@document_builder).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/nori/builder/document_builder.gleam").
-export([new/2, openapi_version/2, description/2, terms_of_service/2, contact/2, contact_info/4, license/2, license_info/3, license_spdx/3, summary/2, components/2, external_docs/2, external_docs_with_description/3, server/2, server_with_description/3, add_server/2, path/3, security/2, tag/2, tag_with_description/3, add_tag/2, build/1]).
-export_type([document_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(" Builder for constructing OpenAPI documents with a fluent API.\n").
-opaque document_builder() :: {document_builder,
nori@internal@version:open_api_version(),
binary(),
binary(),
gleam@option:option(binary()),
gleam@option:option(binary()),
gleam@option:option(nori@info:contact()),
gleam@option:option(nori@info:license()),
gleam@option:option(binary()),
list(nori@server:server()),
list({binary(), nori@operation:path_item()}),
gleam@option:option(nori@components:components()),
list(gleam@dict:dict(binary(), list(binary()))),
list(nori@operation:tag()),
gleam@option:option(nori@schema:external_documentation())}.
-file("src/nori/builder/document_builder.gleam", 37).
?DOC(
" Creates a new document builder with the given title and API version.\n"
" Defaults to OpenAPI 3.1.0.\n"
).
-spec new(binary(), binary()) -> document_builder().
new(Title, Api_version) ->
{document_builder,
v310,
Title,
Api_version,
none,
none,
none,
none,
none,
[],
[],
none,
[],
[],
none}.
-file("src/nori/builder/document_builder.gleam", 57).
?DOC(" Sets the OpenAPI version.\n").
-spec openapi_version(
document_builder(),
nori@internal@version:open_api_version()
) -> document_builder().
openapi_version(Builder, V) ->
{document_builder,
V,
erlang:element(3, Builder),
erlang:element(4, Builder),
erlang:element(5, Builder),
erlang:element(6, Builder),
erlang:element(7, Builder),
erlang:element(8, Builder),
erlang:element(9, Builder),
erlang:element(10, Builder),
erlang:element(11, Builder),
erlang:element(12, Builder),
erlang:element(13, Builder),
erlang:element(14, Builder),
erlang:element(15, Builder)}.
-file("src/nori/builder/document_builder.gleam", 65).
?DOC(" Sets the description.\n").
-spec description(document_builder(), binary()) -> document_builder().
description(Builder, Desc) ->
{document_builder,
erlang:element(2, Builder),
erlang:element(3, Builder),
erlang:element(4, Builder),
{some, Desc},
erlang:element(6, Builder),
erlang:element(7, Builder),
erlang:element(8, Builder),
erlang:element(9, Builder),
erlang:element(10, Builder),
erlang:element(11, Builder),
erlang:element(12, Builder),
erlang:element(13, Builder),
erlang:element(14, Builder),
erlang:element(15, Builder)}.
-file("src/nori/builder/document_builder.gleam", 70).
?DOC(" Sets the terms of service URL.\n").
-spec terms_of_service(document_builder(), binary()) -> document_builder().
terms_of_service(Builder, Url) ->
{document_builder,
erlang:element(2, Builder),
erlang:element(3, Builder),
erlang:element(4, Builder),
erlang:element(5, Builder),
{some, Url},
erlang:element(7, Builder),
erlang:element(8, Builder),
erlang:element(9, Builder),
erlang:element(10, Builder),
erlang:element(11, Builder),
erlang:element(12, Builder),
erlang:element(13, Builder),
erlang:element(14, Builder),
erlang:element(15, Builder)}.
-file("src/nori/builder/document_builder.gleam", 78).
?DOC(" Sets the contact information.\n").
-spec contact(document_builder(), nori@info:contact()) -> document_builder().
contact(Builder, C) ->
{document_builder,
erlang:element(2, Builder),
erlang:element(3, Builder),
erlang:element(4, Builder),
erlang:element(5, Builder),
erlang:element(6, Builder),
{some, C},
erlang:element(8, Builder),
erlang:element(9, Builder),
erlang:element(10, Builder),
erlang:element(11, Builder),
erlang:element(12, Builder),
erlang:element(13, Builder),
erlang:element(14, Builder),
erlang:element(15, Builder)}.
-file("src/nori/builder/document_builder.gleam", 83).
?DOC(" Sets the contact information with name, email, and URL.\n").
-spec contact_info(document_builder(), binary(), binary(), binary()) -> document_builder().
contact_info(Builder, Name, Email, Url) ->
C = {contact, {some, Name}, {some, Url}, {some, Email}, maps:new()},
{document_builder,
erlang:element(2, Builder),
erlang:element(3, Builder),
erlang:element(4, Builder),
erlang:element(5, Builder),
erlang:element(6, Builder),
{some, C},
erlang:element(8, Builder),
erlang:element(9, Builder),
erlang:element(10, Builder),
erlang:element(11, Builder),
erlang:element(12, Builder),
erlang:element(13, Builder),
erlang:element(14, Builder),
erlang:element(15, Builder)}.
-file("src/nori/builder/document_builder.gleam", 100).
?DOC(" Sets the license.\n").
-spec license(document_builder(), nori@info:license()) -> document_builder().
license(Builder, L) ->
{document_builder,
erlang:element(2, Builder),
erlang:element(3, Builder),
erlang:element(4, Builder),
erlang:element(5, Builder),
erlang:element(6, Builder),
erlang:element(7, Builder),
{some, L},
erlang:element(9, Builder),
erlang:element(10, Builder),
erlang:element(11, Builder),
erlang:element(12, Builder),
erlang:element(13, Builder),
erlang:element(14, Builder),
erlang:element(15, Builder)}.
-file("src/nori/builder/document_builder.gleam", 105).
?DOC(" Sets the license with name and URL.\n").
-spec license_info(document_builder(), binary(), binary()) -> document_builder().
license_info(Builder, Name, Url) ->
L = {license, Name, none, {some, Url}, maps:new()},
{document_builder,
erlang:element(2, Builder),
erlang:element(3, Builder),
erlang:element(4, Builder),
erlang:element(5, Builder),
erlang:element(6, Builder),
erlang:element(7, Builder),
{some, L},
erlang:element(9, Builder),
erlang:element(10, Builder),
erlang:element(11, Builder),
erlang:element(12, Builder),
erlang:element(13, Builder),
erlang:element(14, Builder),
erlang:element(15, Builder)}.
-file("src/nori/builder/document_builder.gleam", 121).
?DOC(" Sets the license with SPDX identifier.\n").
-spec license_spdx(document_builder(), binary(), binary()) -> document_builder().
license_spdx(Builder, Name, Identifier) ->
L = {license, Name, {some, Identifier}, none, maps:new()},
{document_builder,
erlang:element(2, Builder),
erlang:element(3, Builder),
erlang:element(4, Builder),
erlang:element(5, Builder),
erlang:element(6, Builder),
erlang:element(7, Builder),
{some, L},
erlang:element(9, Builder),
erlang:element(10, Builder),
erlang:element(11, Builder),
erlang:element(12, Builder),
erlang:element(13, Builder),
erlang:element(14, Builder),
erlang:element(15, Builder)}.
-file("src/nori/builder/document_builder.gleam", 137).
?DOC(" Sets the summary.\n").
-spec summary(document_builder(), binary()) -> document_builder().
summary(Builder, S) ->
{document_builder,
erlang:element(2, Builder),
erlang:element(3, Builder),
erlang:element(4, Builder),
erlang:element(5, Builder),
erlang:element(6, Builder),
erlang:element(7, Builder),
erlang:element(8, Builder),
{some, S},
erlang:element(10, Builder),
erlang:element(11, Builder),
erlang:element(12, Builder),
erlang:element(13, Builder),
erlang:element(14, Builder),
erlang:element(15, Builder)}.
-file("src/nori/builder/document_builder.gleam", 172).
?DOC(" Sets the components.\n").
-spec components(document_builder(), nori@components:components()) -> document_builder().
components(Builder, C) ->
{document_builder,
erlang:element(2, Builder),
erlang:element(3, Builder),
erlang:element(4, Builder),
erlang:element(5, Builder),
erlang:element(6, Builder),
erlang:element(7, Builder),
erlang:element(8, Builder),
erlang:element(9, Builder),
erlang:element(10, Builder),
erlang:element(11, Builder),
{some, C},
erlang:element(13, Builder),
erlang:element(14, Builder),
erlang:element(15, Builder)}.
-file("src/nori/builder/document_builder.gleam", 206).
?DOC(" Sets the external documentation.\n").
-spec external_docs(document_builder(), binary()) -> document_builder().
external_docs(Builder, Url) ->
Docs = {external_documentation, Url, none, maps:new()},
{document_builder,
erlang:element(2, Builder),
erlang:element(3, Builder),
erlang:element(4, Builder),
erlang:element(5, Builder),
erlang:element(6, Builder),
erlang:element(7, Builder),
erlang:element(8, Builder),
erlang:element(9, Builder),
erlang:element(10, Builder),
erlang:element(11, Builder),
erlang:element(12, Builder),
erlang:element(13, Builder),
erlang:element(14, Builder),
{some, Docs}}.
-file("src/nori/builder/document_builder.gleam", 217).
?DOC(" Sets the external documentation with description.\n").
-spec external_docs_with_description(document_builder(), binary(), binary()) -> document_builder().
external_docs_with_description(Builder, Url, Desc) ->
Docs = {external_documentation, Url, {some, Desc}, maps:new()},
{document_builder,
erlang:element(2, Builder),
erlang:element(3, Builder),
erlang:element(4, Builder),
erlang:element(5, Builder),
erlang:element(6, Builder),
erlang:element(7, Builder),
erlang:element(8, Builder),
erlang:element(9, Builder),
erlang:element(10, Builder),
erlang:element(11, Builder),
erlang:element(12, Builder),
erlang:element(13, Builder),
erlang:element(14, Builder),
{some, Docs}}.
-file("src/nori/builder/document_builder.gleam", 280).
-spec do_reverse(list(RJS), list(RJS)) -> list(RJS).
do_reverse(Remaining, Acc) ->
case Remaining of
[] ->
Acc;
[First | Rest] ->
do_reverse(Rest, [First | Acc])
end.
-file("src/nori/builder/document_builder.gleam", 276).
-spec list_reverse(list(RJP)) -> list(RJP).
list_reverse(List) ->
do_reverse(List, []).
-file("src/nori/builder/document_builder.gleam", 272).
-spec append(list(RJM), RJM) -> list(RJM).
append(List, Item) ->
list_reverse([Item | list_reverse(List)]).
-file("src/nori/builder/document_builder.gleam", 142).
?DOC(" Adds a server.\n").
-spec server(document_builder(), binary()) -> document_builder().
server(Builder, Url) ->
S = nori@server:new(Url),
{document_builder,
erlang:element(2, Builder),
erlang:element(3, Builder),
erlang:element(4, Builder),
erlang:element(5, Builder),
erlang:element(6, Builder),
erlang:element(7, Builder),
erlang:element(8, Builder),
erlang:element(9, Builder),
append(erlang:element(10, Builder), S),
erlang:element(11, Builder),
erlang:element(12, Builder),
erlang:element(13, Builder),
erlang:element(14, Builder),
erlang:element(15, Builder)}.
-file("src/nori/builder/document_builder.gleam", 148).
?DOC(" Adds a server with description.\n").
-spec server_with_description(document_builder(), binary(), binary()) -> document_builder().
server_with_description(Builder, Url, Desc) ->
S = nori@server:with_description(Url, Desc),
{document_builder,
erlang:element(2, Builder),
erlang:element(3, Builder),
erlang:element(4, Builder),
erlang:element(5, Builder),
erlang:element(6, Builder),
erlang:element(7, Builder),
erlang:element(8, Builder),
erlang:element(9, Builder),
append(erlang:element(10, Builder), S),
erlang:element(11, Builder),
erlang:element(12, Builder),
erlang:element(13, Builder),
erlang:element(14, Builder),
erlang:element(15, Builder)}.
-file("src/nori/builder/document_builder.gleam", 158).
?DOC(" Adds a Server object.\n").
-spec add_server(document_builder(), nori@server:server()) -> document_builder().
add_server(Builder, S) ->
{document_builder,
erlang:element(2, Builder),
erlang:element(3, Builder),
erlang:element(4, Builder),
erlang:element(5, Builder),
erlang:element(6, Builder),
erlang:element(7, Builder),
erlang:element(8, Builder),
erlang:element(9, Builder),
append(erlang:element(10, Builder), S),
erlang:element(11, Builder),
erlang:element(12, Builder),
erlang:element(13, Builder),
erlang:element(14, Builder),
erlang:element(15, Builder)}.
-file("src/nori/builder/document_builder.gleam", 163).
?DOC(" Adds a path.\n").
-spec path(document_builder(), binary(), nori@operation:path_item()) -> document_builder().
path(Builder, P, Item) ->
{document_builder,
erlang:element(2, Builder),
erlang:element(3, Builder),
erlang:element(4, Builder),
erlang:element(5, Builder),
erlang:element(6, Builder),
erlang:element(7, Builder),
erlang:element(8, Builder),
erlang:element(9, Builder),
erlang:element(10, Builder),
append(erlang:element(11, Builder), {P, Item}),
erlang:element(12, Builder),
erlang:element(13, Builder),
erlang:element(14, Builder),
erlang:element(15, Builder)}.
-file("src/nori/builder/document_builder.gleam", 177).
?DOC(" Adds a security requirement.\n").
-spec security(document_builder(), gleam@dict:dict(binary(), list(binary()))) -> document_builder().
security(Builder, Req) ->
{document_builder,
erlang:element(2, Builder),
erlang:element(3, Builder),
erlang:element(4, Builder),
erlang:element(5, Builder),
erlang:element(6, Builder),
erlang:element(7, Builder),
erlang:element(8, Builder),
erlang:element(9, Builder),
erlang:element(10, Builder),
erlang:element(11, Builder),
erlang:element(12, Builder),
append(erlang:element(13, Builder), Req),
erlang:element(14, Builder),
erlang:element(15, Builder)}.
-file("src/nori/builder/document_builder.gleam", 185).
?DOC(" Adds a tag.\n").
-spec tag(document_builder(), binary()) -> document_builder().
tag(Builder, Name) ->
T = nori@operation:tag(Name),
{document_builder,
erlang:element(2, Builder),
erlang:element(3, Builder),
erlang:element(4, Builder),
erlang:element(5, Builder),
erlang:element(6, Builder),
erlang:element(7, Builder),
erlang:element(8, Builder),
erlang:element(9, Builder),
erlang:element(10, Builder),
erlang:element(11, Builder),
erlang:element(12, Builder),
erlang:element(13, Builder),
append(erlang:element(14, Builder), T),
erlang:element(15, Builder)}.
-file("src/nori/builder/document_builder.gleam", 191).
?DOC(" Adds a tag with description.\n").
-spec tag_with_description(document_builder(), binary(), binary()) -> document_builder().
tag_with_description(Builder, Name, Desc) ->
T = nori@operation:tag_with_description(Name, Desc),
{document_builder,
erlang:element(2, Builder),
erlang:element(3, Builder),
erlang:element(4, Builder),
erlang:element(5, Builder),
erlang:element(6, Builder),
erlang:element(7, Builder),
erlang:element(8, Builder),
erlang:element(9, Builder),
erlang:element(10, Builder),
erlang:element(11, Builder),
erlang:element(12, Builder),
erlang:element(13, Builder),
append(erlang:element(14, Builder), T),
erlang:element(15, Builder)}.
-file("src/nori/builder/document_builder.gleam", 201).
?DOC(" Adds a Tag object.\n").
-spec add_tag(document_builder(), nori@operation:tag()) -> document_builder().
add_tag(Builder, T) ->
{document_builder,
erlang:element(2, Builder),
erlang:element(3, Builder),
erlang:element(4, Builder),
erlang:element(5, Builder),
erlang:element(6, Builder),
erlang:element(7, Builder),
erlang:element(8, Builder),
erlang:element(9, Builder),
erlang:element(10, Builder),
erlang:element(11, Builder),
erlang:element(12, Builder),
erlang:element(13, Builder),
append(erlang:element(14, Builder), T),
erlang:element(15, Builder)}.
-file("src/nori/builder/document_builder.gleam", 287).
-spec list_fold(list(RJW), RJY, fun((RJY, RJW) -> RJY)) -> RJY.
list_fold(List, Initial, F) ->
case List of
[] ->
Initial;
[First | Rest] ->
list_fold(Rest, F(Initial, First), F)
end.
-file("src/nori/builder/document_builder.gleam", 232).
?DOC(" Builds the OpenAPI document.\n").
-spec build(document_builder()) -> nori@document:document().
build(Builder) ->
Info = {info,
erlang:element(3, Builder),
erlang:element(5, Builder),
erlang:element(6, Builder),
erlang:element(7, Builder),
erlang:element(8, Builder),
erlang:element(4, Builder),
erlang:element(9, Builder),
maps:new()},
Paths_dict = case erlang:element(11, Builder) of
[] ->
none;
P ->
D = list_fold(
P,
nori@paths:new(),
fun(Acc, Pair) ->
nori@paths:add(
Acc,
erlang:element(1, Pair),
erlang:element(2, Pair)
)
end
),
{some, D}
end,
{document,
erlang:element(2, Builder),
Info,
none,
erlang:element(10, Builder),
Paths_dict,
maps:new(),
erlang:element(12, Builder),
erlang:element(13, Builder),
erlang:element(14, Builder),
erlang:element(15, Builder),
maps:new()}.