Packages
caffeine_lang
5.3.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([all/0, for_vendor/1, terraform_settings/1, provider/1, generate_terraform/2]).
-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", 111).
-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", 131).
-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", 91).
-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}.
-file("src/caffeine_lang/codegen/platforms.gleam", 32).
?DOC(
" All supported platforms. Order is stable for deterministic output.\n"
" New vendors are added by appending another `*_platform()` constructor here.\n"
).
-spec all() -> list(platform()).
all() ->
[datadog_platform()].
-file("src/caffeine_lang/codegen/platforms.gleam", 38).
?DOC(
" Look up the platform configuration for a given vendor.\n"
" Total: every Vendor variant has a corresponding Platform.\n"
).
-spec for_vendor(caffeine_lang@analysis@vendor:vendor()) -> platform().
for_vendor(V) ->
P@2 = case gleam@list:find(all(), fun(P) -> erlang:element(2, P) =:= V end) of
{ok, P@1} -> P@1;
_assert_fail ->
erlang:error(#{gleam_error => let_assert,
message => <<"Pattern match failed, no pattern matched the value."/utf8>>,
file => <<?FILEPATH/utf8>>,
module => <<"caffeine_lang/codegen/platforms"/utf8>>,
function => <<"for_vendor"/utf8>>,
line => 39,
value => _assert_fail,
start => 1383,
'end' => 1443,
pattern_start => 1394,
pattern_end => 1399})
end,
P@2.
-file("src/caffeine_lang/codegen/platforms.gleam", 44).
?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", 62).
?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", 73).
?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
).