Current section
Files
Jump to
Current section
Files
src/roundabout@internal@generate_types.erl
-module(roundabout@internal@generate_types).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/roundabout/internal/generate_types.gleam").
-export([generate_type/2, generate_type_rec/2]).
-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).
-file("src/roundabout/internal/generate_types.gleam", 104).
?DOC(false).
-spec get_route_name(
roundabout@internal@ancestors:ancestors(roundabout@internal@node:info()),
roundabout@internal@node:info()
) -> binary().
get_route_name(Ancestors, Info) ->
<<(roundabout@internal@common:generate_type_name(Ancestors, Info))/binary,
"Route"/utf8>>.
-file("src/roundabout/internal/generate_types.gleam", 97).
?DOC(false).
-spec generate_type_variant_param(roundabout@internal@node:segment()) -> {ok,
binary()} |
{error, nil}.
generate_type_variant_param(Segment) ->
case Segment of
{seg_param, Param} ->
{ok, roundabout@internal@parameter:print_name_and_type(Param)};
{seg_fixed, _} ->
{error, nil}
end.
-file("src/roundabout/internal/generate_types.gleam", 71).
?DOC(false).
-spec generate_type_variant(
roundabout@internal@ancestors:ancestors(roundabout@internal@node:info()),
roundabout@internal@node:node_()
) -> glam@doc:document().
generate_type_variant(Ancestors, Node) ->
Type_name = roundabout@internal@common:generate_type_name(
Ancestors,
erlang:element(2, Node)
),
Sub = case gleam@list:is_empty(erlang:element(3, Node)) of
true ->
none;
false ->
{some,
<<"sub: "/utf8,
(get_route_name(Ancestors, erlang:element(2, Node)))/binary>>}
end,
Params = begin
_pipe = erlang:element(3, erlang:element(2, Node)),
_pipe@1 = gleam@list:filter_map(
_pipe,
fun generate_type_variant_param/1
),
(fun(Items) -> case Sub of
none ->
Items;
{some, Sub@1} ->
lists:append(Items, [Sub@1])
end end)(_pipe@1)
end,
Params@1 = case gleam@list:is_empty(Params) of
true ->
<<""/utf8>>;
false ->
<<<<"("/utf8, (gleam@string:join(Params, <<", "/utf8>>))/binary>>/binary,
")"/utf8>>
end,
glam@doc:from_string(<<Type_name/binary, Params@1/binary>>).
-file("src/roundabout/internal/generate_types.gleam", 41).
?DOC(false).
-spec generate_type(
roundabout@internal@ancestors:ancestors(roundabout@internal@node:info()),
roundabout@internal@node:node_()
) -> glam@doc:document().
generate_type(Ancestors, Node) ->
Next_ancestors = roundabout@internal@ancestors:push(
Ancestors,
erlang:element(2, Node)
),
Variants = begin
_pipe = erlang:element(3, Node),
_pipe@1 = gleam@list:map(
_pipe,
fun(_capture) -> generate_type_variant(Next_ancestors, _capture) end
),
glam@doc:join(_pipe@1, {line, 1})
end,
Route_name = get_route_name(Ancestors, erlang:element(2, Node)),
glam@doc:concat(
[glam@doc:from_string(
<<<<"pub type "/utf8, Route_name/binary>>/binary, " {"/utf8>>
),
glam@doc:nest_docs([{line, 1}, Variants], 2),
{line, 1},
glam@doc:from_string(<<"}"/utf8>>),
glam@doc:lines(2)]
).
-file("src/roundabout/internal/generate_types.gleam", 24).
?DOC(false).
-spec generate_type_rec(
roundabout@internal@ancestors:ancestors(roundabout@internal@node:info()),
roundabout@internal@node:node_()
) -> glam@doc:document().
generate_type_rec(Ancestors, Node) ->
case gleam@list:is_empty(erlang:element(3, Node)) of
true ->
glam@doc:from_string(<<""/utf8>>);
false ->
Next_ancestors = roundabout@internal@ancestors:push(
Ancestors,
erlang:element(2, Node)
),
Sub_types = begin
_pipe = erlang:element(3, Node),
gleam@list:map(
_pipe,
fun(Node@1) -> generate_type_rec(Next_ancestors, Node@1) end
)
end,
This = generate_type(Ancestors, Node),
glam@doc:concat(gleam@list:prepend(Sub_types, This))
end.