-module(caffeine_lang@codegen@platforms). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]). -define(FILEPATH, "src/caffeine_lang/codegen/platforms.gleam"). -export([terraform_settings/1, provider/1, generate_terraform/2, datadog_platform/0]). -export_type([platform/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. -type platform() :: {platform, caffeine_lang@analysis@vendor:vendor(), binary(), binary(), binary(), list({binary(), terra_madre@hcl:expr()}), list(terra_madre@terraform:variable()), fun((list(caffeine_lang@linker@ir:intermediate_representation(caffeine_lang@linker@ir:resolved()))) -> {ok, {list(terra_madre@terraform:resource()), list(binary())}} | {error, caffeine_lang@errors:compilation_error()})}. -file("src/caffeine_lang/codegen/platforms.gleam", 30). ?DOC(" Derive the TerraformSettings block for a platform.\n"). -spec terraform_settings(platform()) -> terra_madre@terraform:terraform_settings(). terraform_settings(P) -> {terraform_settings, none, maps:from_list( [{erlang:element(3, P), {provider_requirement, erlang:element(4, P), {some, erlang:element(5, P)}}}] ), none, none}. -file("src/caffeine_lang/codegen/platforms.gleam", 48). ?DOC(" Derive the Provider block for a platform.\n"). -spec provider(platform()) -> terra_madre@terraform:provider(). provider(P) -> {provider, erlang:element(3, P), none, maps:from_list(erlang:element(6, P)), []}. -file("src/caffeine_lang/codegen/platforms.gleam", 59). ?DOC( " Generate complete Terraform output (boilerplate + resources) for a platform.\n" " Used in tests to produce full HCL for a single vendor in isolation.\n" ). -spec generate_terraform( platform(), list(caffeine_lang@linker@ir:intermediate_representation(caffeine_lang@linker@ir:resolved())) ) -> {ok, {binary(), list(binary())}} | {error, caffeine_lang@errors:compilation_error()}. generate_terraform(P, Irs) -> gleam@result:'try'( (erlang:element(8, P))(Irs), fun(_use0) -> {Resources, Warnings} = _use0, {ok, {caffeine_lang@codegen@generator_utils:render_terraform_config( Resources, terraform_settings(P), [provider(P)], erlang:element(7, P) ), Warnings}} end ). -file("src/caffeine_lang/codegen/platforms.gleam", 97). -spec typed_var(binary(), binary(), binary(), boolean()) -> terra_madre@terraform:variable(). typed_var(Name, Type_, Description, Sensitive) -> {variable, Name, {some, {identifier, Type_}}, none, {some, Description}, case Sensitive of true -> {some, true}; false -> none end, none, []}. -file("src/caffeine_lang/codegen/platforms.gleam", 117). -spec sensitive_string(binary(), binary()) -> terra_madre@terraform:variable(). sensitive_string(Name, Description) -> typed_var(Name, <<"string"/utf8>>, Description, true). -file("src/caffeine_lang/codegen/platforms.gleam", 77). -spec datadog_platform() -> platform(). datadog_platform() -> {platform, datadog, <<"datadog"/utf8>>, <<"DataDog/datadog"/utf8>>, <<"~> 3.0"/utf8>>, [{<<"api_key"/utf8>>, terra_madre@hcl:ref(<<"var.datadog_api_key"/utf8>>)}, {<<"app_key"/utf8>>, terra_madre@hcl:ref(<<"var.datadog_app_key"/utf8>>)}], [sensitive_string( <<"datadog_api_key"/utf8>>, <<"Datadog API key"/utf8>> ), sensitive_string( <<"datadog_app_key"/utf8>>, <<"Datadog Application key"/utf8>> )], fun caffeine_lang@codegen@datadog:generate_resources/1}.