Current section

Files

Jump to
caffeine_lang src caffeine_lang@compiler.erl
Raw

src/caffeine_lang@compiler.erl

-module(caffeine_lang@compiler).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/caffeine_lang/compiler.gleam").
-export([compile/3]).
-file("src/caffeine_lang/compiler.gleam", 8).
-spec compile(binary(), binary(), binary()) -> nil.
compile(Specification_directory, Instantiation_directory, Output_directory) ->
gleam_stdlib:println(<<"1️⃣ Compiling..."/utf8>>),
gleam_stdlib:println(
<<"\tSpecification directory: "/utf8, Specification_directory/binary>>
),
gleam_stdlib:println(
<<"\tInstantiation directory: "/utf8, Instantiation_directory/binary>>
),
gleam_stdlib:println(
<<"\tOutput directory: "/utf8, Output_directory/binary>>
),
Organization_result = caffeine_lang@phase_2@linker@organization@linker:link_specification_and_instantiation(
Specification_directory,
Instantiation_directory
),
case Organization_result of
{ok, Organization} ->
gleam_stdlib:println(<<"2️⃣ Parsed and linked successfully!"/utf8>>),
Result = caffeine_lang@phase_3@semantic:perform_semantic_analysis(
Organization
),
case Result of
{ok, _} ->
gleam_stdlib:println(
<<"3️⃣ Semantic analysis successful!"/utf8>>
),
gleam_stdlib:println(<<"4️⃣ Resolving SLOs..."/utf8>>),
Resolved_slos = caffeine_lang@phase_4@slo_resolver:resolve_slos(
Organization
),
gleam_stdlib:println(<<"Resolved SLOs successfully!"/utf8>>),
case Resolved_slos of
{ok, Resolved_slos@1} ->
gleam_stdlib:println(<<"5️⃣ Generating..."/utf8>>),
_ = caffeine_lang@phase_5@terraform@generator:generate(
Resolved_slos@1,
Output_directory
),
gleam_stdlib:println(
<<"🎉Generated successfully!"/utf8>>
);
{error, E} ->
gleam_stdlib:println_error(E)
end;
{error, E@1} ->
case E@1 of
{undefined_service_error, _} ->
gleam_stdlib:println_error(
<<"Undefined service error."/utf8>>
);
{undefined_sli_type_error, _} ->
gleam_stdlib:println_error(
<<"Undefined sli type error."/utf8>>
);
{invalid_slo_threshold_error, _} ->
gleam_stdlib:println_error(
<<"Invalid sli threshold error."/utf8>>
);
{duplicate_service_error, _} ->
gleam_stdlib:println_error(
<<"Duplicate service error."/utf8>>
)
end
end;
{error, E@2} ->
gleam_stdlib:println_error(E@2)
end.