summaryrefslogtreecommitdiff
path: root/module/ri-base/src/main/java/io/trygvis/rules/terraform/TerraformResource.java
diff options
context:
space:
mode:
Diffstat (limited to 'module/ri-base/src/main/java/io/trygvis/rules/terraform/TerraformResource.java')
-rw-r--r--module/ri-base/src/main/java/io/trygvis/rules/terraform/TerraformResource.java96
1 files changed, 96 insertions, 0 deletions
diff --git a/module/ri-base/src/main/java/io/trygvis/rules/terraform/TerraformResource.java b/module/ri-base/src/main/java/io/trygvis/rules/terraform/TerraformResource.java
new file mode 100644
index 0000000..41bd6ae
--- /dev/null
+++ b/module/ri-base/src/main/java/io/trygvis/rules/terraform/TerraformResource.java
@@ -0,0 +1,96 @@
+package io.trygvis.rules.terraform;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class TerraformResource {
+ private static final String EOL = System.getProperty("line.separator");
+ private final String output;
+ private final String kind;
+ private final String instance;
+ private final Map<String, TerraformValue> values = new HashMap<>();
+
+ public TerraformResource(String output, String kind, String instance) {
+ this.output = output;
+ this.kind = kind;
+ this.instance = instance;
+ }
+
+ public String getOutput() {
+ return output;
+ }
+
+ public void putString(String key, String value) {
+ values.put(key, new StringTerraformValue(value));
+ }
+
+ public String asString() {
+ var buf = new StringBuilder();
+
+ buf.append(quote(kind));
+ buf.append(" ");
+ buf.append(quote(instance));
+ buf.append(" {");
+ buf.append(EOL);
+
+ for (var entry : values.entrySet()) {
+ buf.append(" ");
+ buf.append(entry.getKey());
+ buf.append(" = ");
+ buf.append(entry.getValue().asString());
+ buf.append(EOL);
+ }
+
+ buf.append("}");
+ buf.append(EOL);
+
+ return buf.toString();
+ }
+
+ public interface TerraformValue {
+ String asString();
+ }
+
+ public static class StringTerraformValue implements TerraformValue {
+ private final String value;
+
+ public StringTerraformValue(String value) {
+ this.value = value;
+ }
+
+ @Override
+ public String asString() {
+ return quote(value);
+ }
+ }
+
+ public static class BooleanTerraformValue implements TerraformValue {
+ private final boolean value;
+
+ public BooleanTerraformValue(boolean value) {
+ this.value = value;
+ }
+
+ @Override
+ public String asString() {
+ return String.valueOf(value);
+ }
+ }
+
+ public static class ExpressionTerraformValue implements TerraformValue {
+ private final String value;
+
+ public ExpressionTerraformValue(String value) {
+ this.value = value;
+ }
+
+ @Override
+ public String asString() {
+ return value;
+ }
+ }
+
+ private static String quote(String value) {
+ return "\"%s\"".formatted(value);
+ }
+}