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 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); } }