-module(internal@codegen@modules). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]). -define(FILEPATH, "src/internal/codegen/modules.gleam"). -export([empty/0, add_functions/2, add_imports/2, merge/2, to_string/1]). -export_type([mod/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). -type mod() :: {mod, binary(), list(internal@codegen@statements:gleam_statement()), list(internal@codegen@types:gleam_type()), list(binary())}. -file("src/internal/codegen/modules.gleam", 16). ?DOC(false). -spec empty() -> mod(). empty() -> {mod, <<""/utf8>>, [], [], []}. -file("src/internal/codegen/modules.gleam", 20). ?DOC(false). -spec add_functions(mod(), list(internal@codegen@statements:gleam_statement())) -> mod(). add_functions(Mod, Functions) -> {mod, erlang:element(2, Mod), lists:append([erlang:element(3, Mod), Functions]), erlang:element(4, Mod), erlang:element(5, Mod)}. -file("src/internal/codegen/modules.gleam", 24). ?DOC(false). -spec add_imports(mod(), list(binary())) -> mod(). add_imports(Mod, Imports) -> {mod, erlang:element(2, Mod), erlang:element(3, Mod), erlang:element(4, Mod), lists:append([erlang:element(5, Mod), Imports])}. -file("src/internal/codegen/modules.gleam", 28). ?DOC(false). -spec merge(mod(), mod()) -> mod(). merge(M1, M2) -> {mod, erlang:element(2, M1), lists:append([erlang:element(3, M1), erlang:element(3, M2)]), lists:append([erlang:element(4, M1), erlang:element(4, M2)]), begin _pipe = lists:append([erlang:element(5, M1), erlang:element(5, M2)]), _pipe@1 = gleam@set:from_list(_pipe), gleam@set:to_list(_pipe@1) end}. -file("src/internal/codegen/modules.gleam", 39). ?DOC(false). -spec to_string(mod()) -> binary(). to_string(M) -> _pipe = lists:append( [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>>).