-module(caffeine_lang@codegen@generator_utils). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]). -define(FILEPATH, "src/caffeine_lang/codegen/generator_utils.gleam"). -export([render_terraform_config/4, build_source_comment/1, render_resource_to_string/1, build_description/2, resolution_error/2, require_slo_fields/2, require_evaluation/3, resolve_cql_expression/4, build_terraform_settings/3, build_provider/2, generate_resources_simple/2, generate_resources_multi/2, generate_terraform/5]). -if(?OTP_RELEASE >= 27). -define(MODULEDOC(Str), -moduledoc(Str)). -define(DOC(Str), -doc(Str)). -else. -define(MODULEDOC(Str), -compile([])). -define(DOC(Str), -compile([])). -endif. -file("src/caffeine_lang/codegen/generator_utils.gleam", 21). ?DOC(false). -spec render_terraform_config( list(terra_madre@terraform:resource()), terra_madre@terraform:terraform_settings(), list(terra_madre@terraform:provider()), list(terra_madre@terraform:variable()) ) -> binary(). render_terraform_config(Resources, Settings, Providers, Variables) -> Config = {config, {some, Settings}, Providers, Resources, [], Variables, [], [], []}, terra_madre@render:render_config(Config). -file("src/caffeine_lang/codegen/generator_utils.gleam", 43). ?DOC(false). -spec build_source_comment( caffeine_lang@linker@ir:intermediate_representation_meta_data() ) -> binary(). build_source_comment(Metadata) -> <<<<<<<<<<<<<<<<<<<<"# Caffeine: "/utf8, (erlang:element(3, Metadata))/binary>>/binary, "."/utf8>>/binary, (erlang:element(6, Metadata))/binary>>/binary, "."/utf8>>/binary, (erlang:element(4, Metadata))/binary>>/binary, "."/utf8>>/binary, (erlang:element(2, Metadata))/binary>>/binary, " (blueprint: "/utf8>>/binary, (erlang:element(5, Metadata))/binary>>/binary, ")"/utf8>>. -file("src/caffeine_lang/codegen/generator_utils.gleam", 61). ?DOC(false). -spec render_resource_to_string(terra_madre@terraform:resource()) -> binary(). render_resource_to_string(Resource) -> Config = {config, none, [], [Resource], [], [], [], [], []}, _pipe = terra_madre@render:render_config(Config), gleam@string:drop_end(_pipe, 1). -file("src/caffeine_lang/codegen/generator_utils.gleam", 80). ?DOC(false). -spec build_description( caffeine_lang@linker@ir:intermediate_representation(), caffeine_lang@linker@ir:slo_fields() ) -> binary(). build_description(Ir, Slo) -> case erlang:element(7, Slo) of {some, Url} -> <<<<"[Runbook]("/utf8, Url/binary>>/binary, ")"/utf8>>; none -> <<<<<<<<<<<<"Managed by Caffeine ("/utf8, (erlang:element(3, erlang:element(2, Ir)))/binary>>/binary, "/"/utf8>>/binary, (erlang:element(6, erlang:element(2, Ir)))/binary>>/binary, "/"/utf8>>/binary, (erlang:element(4, erlang:element(2, Ir)))/binary>>/binary, ")"/utf8>> end. -file("src/caffeine_lang/codegen/generator_utils.gleam", 131). ?DOC(" Maps a vendor constant to a human-friendly display name.\n"). -spec vendor_display_name(binary()) -> binary(). vendor_display_name(Vendor) -> case Vendor of <<"datadog"/utf8>> -> <<"Datadog"/utf8>>; <<"honeycomb"/utf8>> -> <<"Honeycomb"/utf8>>; <<"dynatrace"/utf8>> -> <<"Dynatrace"/utf8>>; <<"newrelic"/utf8>> -> <<"New Relic"/utf8>>; Other -> Other end. -file("src/caffeine_lang/codegen/generator_utils.gleam", 160). ?DOC(false). -spec resolution_error(binary(), binary()) -> caffeine_lang@errors:compilation_error(). resolution_error(Vendor_name, Msg) -> caffeine_lang@errors:generator_terraform_resolution_error(Vendor_name, Msg). -file("src/caffeine_lang/codegen/generator_utils.gleam", 99). ?DOC(false). -spec require_slo_fields( caffeine_lang@linker@ir:intermediate_representation(), binary() ) -> {ok, caffeine_lang@linker@ir:slo_fields()} | {error, caffeine_lang@errors:compilation_error()}. require_slo_fields(Ir, Vendor_name) -> _pipe = caffeine_lang@linker@ir:get_slo_fields(erlang:element(6, Ir)), gleam@option:to_result( _pipe, resolution_error( Vendor_name, <<<<"expectation '"/utf8, (caffeine_lang@linker@ir:ir_to_identifier(Ir))/binary>>/binary, "' - missing SLO artifact data"/utf8>> ) ). -file("src/caffeine_lang/codegen/generator_utils.gleam", 114). ?DOC(false). -spec require_evaluation( caffeine_lang@linker@ir:slo_fields(), caffeine_lang@linker@ir:intermediate_representation(), binary() ) -> {ok, binary()} | {error, caffeine_lang@errors:compilation_error()}. require_evaluation(Slo, Ir, Vendor_name) -> _pipe = erlang:element(5, Slo), gleam@option:to_result( _pipe, resolution_error( Vendor_name, <<<<<<<<"expectation '"/utf8, (caffeine_lang@linker@ir:ir_to_identifier(Ir))/binary>>/binary, "' - missing evaluation for "/utf8>>/binary, (vendor_display_name(Vendor_name))/binary>>/binary, " SLO"/utf8>> ) ). -file("src/caffeine_lang/codegen/generator_utils.gleam", 143). ?DOC(false). -spec resolve_cql_expression( binary(), gleam@dict:dict(binary(), binary()), caffeine_lang@linker@ir:intermediate_representation(), binary() ) -> {ok, binary()} | {error, caffeine_lang@errors:compilation_error()}. resolve_cql_expression(Evaluation_expr, Indicators, Ir, Vendor_name) -> _pipe = caffeine_query_language@generator:resolve_slo_to_expression( Evaluation_expr, Indicators ), gleam@result:map_error( _pipe, fun(Err) -> resolution_error( Vendor_name, <<<<<<"expectation '"/utf8, (caffeine_lang@linker@ir:ir_to_identifier(Ir))/binary>>/binary, "' - "/utf8>>/binary, Err/binary>> ) end ). -file("src/caffeine_lang/codegen/generator_utils.gleam", 169). ?DOC(false). -spec build_terraform_settings(binary(), binary(), binary()) -> terra_madre@terraform:terraform_settings(). build_terraform_settings(Provider_name, Source, Version) -> {terraform_settings, none, maps:from_list( [{Provider_name, {provider_requirement, Source, {some, Version}}}] ), none, none}. -file("src/caffeine_lang/codegen/generator_utils.gleam", 189). ?DOC(false). -spec build_provider(binary(), list({binary(), terra_madre@hcl:expr()})) -> terra_madre@terraform:provider(). build_provider(Name, Attributes) -> {provider, Name, none, maps:from_list(Attributes), []}. -file("src/caffeine_lang/codegen/generator_utils.gleam", 204). ?DOC(false). -spec generate_resources_simple( list(caffeine_lang@linker@ir:intermediate_representation()), fun((caffeine_lang@linker@ir:intermediate_representation()) -> {ok, terra_madre@terraform:resource()} | {error, caffeine_lang@errors:compilation_error()}) ) -> {ok, {list(terra_madre@terraform:resource()), list(binary())}} | {error, caffeine_lang@errors:compilation_error()}. generate_resources_simple(Irs, Mapper) -> _pipe = Irs, _pipe@1 = gleam@list:try_map(_pipe, Mapper), gleam@result:map(_pipe@1, fun(R) -> {R, []} end). -file("src/caffeine_lang/codegen/generator_utils.gleam", 217). ?DOC(false). -spec generate_resources_multi( list(caffeine_lang@linker@ir:intermediate_representation()), fun((caffeine_lang@linker@ir:intermediate_representation()) -> {ok, list(terra_madre@terraform:resource())} | {error, caffeine_lang@errors:compilation_error()}) ) -> {ok, {list(terra_madre@terraform:resource()), list(binary())}} | {error, caffeine_lang@errors:compilation_error()}. generate_resources_multi(Irs, Mapper) -> _pipe = Irs, _pipe@1 = gleam@list:try_map(_pipe, Mapper), gleam@result:map(_pipe@1, fun(Lists) -> {lists:append(Lists), []} end). -file("src/caffeine_lang/codegen/generator_utils.gleam", 231). ?DOC(false). -spec generate_terraform( list(caffeine_lang@linker@ir:intermediate_representation()), terra_madre@terraform:terraform_settings(), terra_madre@terraform:provider(), list(terra_madre@terraform:variable()), fun((list(caffeine_lang@linker@ir:intermediate_representation())) -> {ok, {list(terra_madre@terraform:resource()), list(binary())}} | {error, caffeine_lang@errors:compilation_error()}) ) -> {ok, binary()} | {error, caffeine_lang@errors:compilation_error()}. generate_terraform(Irs, Settings, Provider, Variables, Generate_resources) -> gleam@result:'try'( Generate_resources(Irs), fun(_use0) -> {Resources, _} = _use0, {ok, render_terraform_config( Resources, Settings, [Provider], Variables )} end ).