-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.