Current section

Files

Jump to
gserde src internal@codegen@modules.erl
Raw

src/internal@codegen@modules.erl

-module(internal@codegen@modules).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-export([empty/0, add_functions/2, add_imports/2, merge/2, to_string/1]).
-export_type([mod/0]).
-type mod() :: {mod,
binary(),
list(internal@codegen@statements:gleam_statement()),
list(internal@codegen@types:gleam_type()),
list(binary())}.
-file("/Users/cdaringe/src/gserde/src/internal/codegen/modules.gleam", 16).
-spec empty() -> mod().
empty() ->
{mod, <<""/utf8>>, [], [], []}.
-file("/Users/cdaringe/src/gserde/src/internal/codegen/modules.gleam", 20).
-spec add_functions(mod(), list(internal@codegen@statements:gleam_statement())) -> mod().
add_functions(Mod, Functions) ->
erlang:setelement(
3,
Mod,
gleam@list:concat([erlang:element(3, Mod), Functions])
).
-file("/Users/cdaringe/src/gserde/src/internal/codegen/modules.gleam", 24).
-spec add_imports(mod(), list(binary())) -> mod().
add_imports(Mod, Imports) ->
erlang:setelement(
5,
Mod,
gleam@list:concat([erlang:element(5, Mod), Imports])
).
-file("/Users/cdaringe/src/gserde/src/internal/codegen/modules.gleam", 28).
-spec merge(mod(), mod()) -> mod().
merge(M1, M2) ->
{mod,
erlang:element(2, M1),
gleam@list:concat([erlang:element(3, M1), erlang:element(3, M2)]),
gleam@list:concat([erlang:element(4, M1), erlang:element(4, M2)]),
begin
_pipe = gleam@list:concat(
[erlang:element(5, M1), erlang:element(5, M2)]
),
_pipe@1 = gleam@set:from_list(_pipe),
gleam@set:to_list(_pipe@1)
end}.
-file("/Users/cdaringe/src/gserde/src/internal/codegen/modules.gleam", 39).
-spec to_string(mod()) -> binary().
to_string(M) ->
_pipe = gleam@list:concat(
[gleam@list:map(
erlang:element(5, M),
fun(I) -> <<"import "/utf8, I/binary>> end
),
gleam@list:map(
erlang:element(4, M),
fun internal@codegen@types:generate_type_def/1
),
gleam@list:map(
erlang:element(3, M),
fun internal@codegen@statements:generate/1
)]
),
gleam@string:join(_pipe, <<"\n"/utf8>>).