summaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/RustWriter.java27
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustExpression.java2
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustStructExprField.java40
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustStructExpression.java48
4 files changed, 116 insertions, 1 deletions
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/RustWriter.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/RustWriter.java
index 5a29448..26a2737 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/RustWriter.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/RustWriter.java
@@ -312,6 +312,10 @@ public class RustWriter implements AutoCloseable {
case RustPathInExpression pathInExpression -> {
this.writePathInExpression(pathInExpression);
}
+
+ case RustStructExpression structExpression -> {
+ this.writeStructExpression(structExpression);
+ }
}
}
@@ -357,6 +361,29 @@ public class RustWriter implements AutoCloseable {
this.writeIdentifier(fieldExpression.fieldName());
}
+ private void writeStructExpression(RustStructExpression structExpression) throws IOException {
+ this.writePathInExpression(structExpression.structPath());
+ this.writer.write(" {");
+
+ if (!structExpression.fieldValues().isEmpty()) {
+ this.writer.write(" ");
+ writeWithSeparator(
+ structExpression.fieldValues(),
+ fieldValue -> {
+ this.writeIdentifier(fieldValue.name());
+ this.writer.write(": ");
+ this.writeExpression(fieldValue.value());
+ },
+ () -> {
+ this.writer.write(", ");
+ }
+ );
+ this.writer.write(" ");
+ }
+
+ this.writer.write("}");
+ }
+
// == Types ==
void writeType(RustType type) throws IOException {
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustExpression.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustExpression.java
index f850a72..1918fab 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustExpression.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustExpression.java
@@ -5,7 +5,7 @@ package org.zwobble.hobgoblin.compiler.output.lang.rust.ast;
// Custom area start: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustExpression imports
// Custom area end: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustExpression imports
-public sealed interface RustExpression permits org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustBlockExpression, org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustBoolLiteral, org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustCallExpression, org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustFieldExpression, org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustPathInExpression {
+public sealed interface RustExpression permits org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustBlockExpression, org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustBoolLiteral, org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustCallExpression, org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustFieldExpression, org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustPathInExpression, org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustStructExpression {
public interface Builder {
public org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustExpression build();
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustStructExprField.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustStructExprField.java
new file mode 100644
index 0000000..56c221f
--- /dev/null
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustStructExprField.java
@@ -0,0 +1,40 @@
+// Generated by hobgoblin.
+
+package org.zwobble.hobgoblin.compiler.output.lang.rust.ast;
+
+// Custom area start: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustStructExprField imports
+// Custom area end: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustStructExprField imports
+
+public record RustStructExprField(org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustIdentifier name, org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustExpression value) {
+ public static org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustStructExprField.Builder arbitrary() {
+ return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustStructExprField.Builder(org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustIdentifier.arbitrary().build(), org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustBlockExpression.arbitrary().build());
+ }
+
+ public record Builder(org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustIdentifier name, org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustExpression value) {
+ public org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustStructExprField build() {
+ return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustStructExprField(name, value);
+ }
+
+ public org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustStructExprField.Builder withName(org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustIdentifier name) {
+ return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustStructExprField.Builder(name, value);
+ }
+
+ public org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustStructExprField.Builder withName(org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustIdentifier.Builder name) {
+ return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustStructExprField.Builder(name.build(), value);
+ }
+
+ public org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustStructExprField.Builder withValue(org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustExpression value) {
+ return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustStructExprField.Builder(name, value);
+ }
+
+ public org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustStructExprField.Builder withValue(org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustExpression.Builder value) {
+ return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustStructExprField.Builder(name, value.build());
+ }
+
+ // Custom area start: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustStructExprField.Builder body
+ // Custom area end: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustStructExprField.Builder body
+ }
+
+ // Custom area start: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustStructExprField body
+ // Custom area end: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustStructExprField body
+}
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustStructExpression.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustStructExpression.java
new file mode 100644
index 0000000..370e17c
--- /dev/null
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustStructExpression.java
@@ -0,0 +1,48 @@
+// Generated by hobgoblin.
+
+package org.zwobble.hobgoblin.compiler.output.lang.rust.ast;
+
+// Custom area start: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustStructExpression imports
+// Custom area end: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustStructExpression imports
+
+public record RustStructExpression(org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustPathInExpression structPath, java.util.List<org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustStructExprField> fieldValues) implements org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustExpression {
+ public static org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustStructExpression.Builder arbitrary() {
+ return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustStructExpression.Builder(org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustPathInExpression.arbitrary().build(), java.util.List.of());
+ }
+
+ public record Builder(org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustPathInExpression structPath, java.util.List<org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustStructExprField> fieldValues) implements org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustExpression.Builder {
+ public org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustStructExpression build() {
+ return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustStructExpression(structPath, fieldValues);
+ }
+
+ public org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustStructExpression.Builder withStructPath(org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustPathInExpression structPath) {
+ return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustStructExpression.Builder(structPath, fieldValues);
+ }
+
+ public org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustStructExpression.Builder withStructPath(org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustPathInExpression.Builder structPath) {
+ return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustStructExpression.Builder(structPath.build(), fieldValues);
+ }
+
+ public org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustStructExpression.Builder withFieldValues(java.util.List<org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustStructExprField> fieldValues) {
+ return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustStructExpression.Builder(structPath, fieldValues);
+ }
+
+ public org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustStructExpression.Builder addFieldValue(org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustStructExprField fieldValue) {
+ var fieldValues = new java.util.ArrayList<org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustStructExprField>(this.fieldValues);
+ fieldValues.add(fieldValue);
+ return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustStructExpression.Builder(structPath, fieldValues);
+ }
+
+ public org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustStructExpression.Builder addFieldValue(org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustStructExprField.Builder fieldValue) {
+ var fieldValues = new java.util.ArrayList<org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustStructExprField>(this.fieldValues);
+ fieldValues.add(fieldValue.build());
+ return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustStructExpression.Builder(structPath, fieldValues);
+ }
+
+ // Custom area start: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustStructExpression.Builder body
+ // Custom area end: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustStructExpression.Builder body
+ }
+
+ // Custom area start: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustStructExpression body
+ // Custom area end: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustStructExpression body
+}