Packages
caffeine_lang
5.5.0
6.3.1
6.3.0
6.2.2
6.2.1
6.2.0
6.1.2
6.1.1
6.1.0
6.0.0
5.6.0
5.5.0
5.4.4
5.4.3
5.4.2
5.4.1
5.4.0
5.3.0
5.2.0
5.1.1
5.1.0
5.0.12
5.0.11
5.0.10
5.0.8
5.0.7
5.0.6
5.0.5
5.0.4
5.0.1
5.0.0
4.10.0
4.9.0
4.8.3
4.8.2
4.8.1
4.8.0
4.7.9
4.7.8
4.7.7
4.7.6
4.7.5
4.6.7
4.6.6
4.6.5
4.6.4
4.6.3
4.6.2
4.6.0
4.5.1
4.5.0
4.4.4
4.4.3
4.4.1
4.4.0
4.3.7
4.3.6
3.0.6
3.0.5
3.0.4
3.0.3
3.0.2
3.0.1
3.0.0
2.0.5
2.0.4
2.0.3
2.0.2
2.0.1
2.0.0
1.0.2
1.0.1
0.1.0
0.0.24
0.0.23
0.0.22
0.0.21
0.0.20
0.0.19
0.0.18
0.0.17
0.0.16
0.0.15
0.0.14
0.0.13
0.0.12
0.0.11
0.0.10
0.0.9
0.0.8
0.0.7
0.0.6
0.0.5
0.0.4
0.0.2
0.0.1
A compiler for generating reliability artifacts from service expectation definitions.
Current section
Files
Jump to
Current section
Files
src/caffeine_lang@codegen@platforms.erl
-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}.