summaryrefslogtreecommitdiff
path: root/src/main/java/org
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org')
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/RustWriter.java40
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustEnum.java40
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustEnumVariant.java40
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustEnumVariantFields.java18
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustEnumVariantTuple.java28
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustItem.java2
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustTupleField.java32
7 files changed, 199 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 514e3f5..51de98a 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
@@ -56,12 +56,52 @@ public class RustWriter implements AutoCloseable {
void writeItem(RustItem item) throws IOException {
switch (item) {
+ case RustEnum enum_ -> {
+ writeEnum(enum_);
+ }
+
case RustStructStruct structStruct -> {
writeStructStruct(structStruct);
}
}
}
+ private void writeEnum(RustEnum enum_) throws IOException {
+ this.writeDocComment(enum_.docComment());
+ this.writer.write("pub enum ");
+ this.writeIdentifier(enum_.name());
+ this.writer.write(" {");
+
+ if (!enum_.variants().isEmpty()) {
+ this.writer.indent();
+
+ for (var variant : enum_.variants()) {
+ this.writer.newLine();
+ writeIdentifier(variant.name());
+ this.writer.write("(");
+
+ switch (variant.fields()) {
+ case RustEnumVariantTuple tuple -> {
+ writeWithSeparator(
+ tuple.fields(),
+ field -> {
+ this.writeType(field.type());
+ },
+ () -> this.writer.write(", ")
+ );
+ }
+ }
+
+ this.writer.write("),");
+ }
+
+ this.writer.dedent();
+ }
+
+ this.writer.newLine();
+ this.writer.write("}");
+ }
+
private void writeStructStruct(RustStructStruct structStruct) throws IOException {
this.writeDocComment(structStruct.docComment());
this.writer.write("pub struct ");
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustEnum.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustEnum.java
new file mode 100644
index 0000000..338bdb4
--- /dev/null
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustEnum.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.RustEnum imports
+// Custom area end: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnum imports
+
+public record RustEnum(org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustIdentifier name, java.util.List<org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnumVariant> variants, org.zwobble.hobgoblin.compiler.ast.DocComment docComment) implements org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustItem {
+ public static org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnum.Builder arbitrary() {
+ return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnum.Builder(org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustIdentifier.arbitrary().build(), java.util.List.of(), org.zwobble.hobgoblin.compiler.ast.HobgoblinNativeAst.arbitraryDocComment());
+ }
+
+ public record Builder(org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustIdentifier name, java.util.List<org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnumVariant> variants, org.zwobble.hobgoblin.compiler.ast.DocComment docComment) implements org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustItem.Builder {
+ public org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnum build() {
+ return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnum(name, variants, docComment);
+ }
+
+ public org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnum.Builder withName(org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustIdentifier name) {
+ return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnum.Builder(name, variants, docComment);
+ }
+
+ public org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnum.Builder withName(org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustIdentifier.Builder name) {
+ return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnum.Builder(name.build(), variants, docComment);
+ }
+
+ public org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnum.Builder withVariants(java.util.List<org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnumVariant> variants) {
+ return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnum.Builder(name, variants, docComment);
+ }
+
+ public org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnum.Builder withDocComment(org.zwobble.hobgoblin.compiler.ast.DocComment docComment) {
+ return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnum.Builder(name, variants, docComment);
+ }
+
+ // Custom area start: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnum.Builder body
+ // Custom area end: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnum.Builder body
+ }
+
+ // Custom area start: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnum body
+ // Custom area end: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnum body
+}
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustEnumVariant.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustEnumVariant.java
new file mode 100644
index 0000000..3eff7a1
--- /dev/null
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustEnumVariant.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.RustEnumVariant imports
+// Custom area end: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnumVariant imports
+
+public record RustEnumVariant(org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustIdentifier name, org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnumVariantFields fields) {
+ public static org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnumVariant.Builder arbitrary() {
+ return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnumVariant.Builder(org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustIdentifier.arbitrary().build(), org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnumVariantTuple.arbitrary().build());
+ }
+
+ public record Builder(org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustIdentifier name, org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnumVariantFields fields) {
+ public org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnumVariant build() {
+ return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnumVariant(name, fields);
+ }
+
+ public org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnumVariant.Builder withName(org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustIdentifier name) {
+ return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnumVariant.Builder(name, fields);
+ }
+
+ public org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnumVariant.Builder withName(org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustIdentifier.Builder name) {
+ return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnumVariant.Builder(name.build(), fields);
+ }
+
+ public org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnumVariant.Builder withFields(org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnumVariantFields fields) {
+ return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnumVariant.Builder(name, fields);
+ }
+
+ public org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnumVariant.Builder withFields(org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnumVariantFields.Builder fields) {
+ return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnumVariant.Builder(name, fields.build());
+ }
+
+ // Custom area start: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnumVariant.Builder body
+ // Custom area end: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnumVariant.Builder body
+ }
+
+ // Custom area start: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnumVariant body
+ // Custom area end: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnumVariant body
+}
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustEnumVariantFields.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustEnumVariantFields.java
new file mode 100644
index 0000000..56d39e6
--- /dev/null
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustEnumVariantFields.java
@@ -0,0 +1,18 @@
+// Generated by hobgoblin.
+
+package org.zwobble.hobgoblin.compiler.output.lang.rust.ast;
+
+// Custom area start: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnumVariantFields imports
+// Custom area end: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnumVariantFields imports
+
+public sealed interface RustEnumVariantFields permits org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnumVariantTuple {
+ public interface Builder {
+ public org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnumVariantFields build();
+
+ // Custom area start: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnumVariantFields.Builder body
+ // Custom area end: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnumVariantFields.Builder body
+ }
+
+ // Custom area start: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnumVariantFields body
+ // Custom area end: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnumVariantFields body
+}
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustEnumVariantTuple.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustEnumVariantTuple.java
new file mode 100644
index 0000000..a8b1e68
--- /dev/null
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustEnumVariantTuple.java
@@ -0,0 +1,28 @@
+// Generated by hobgoblin.
+
+package org.zwobble.hobgoblin.compiler.output.lang.rust.ast;
+
+// Custom area start: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnumVariantTuple imports
+// Custom area end: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnumVariantTuple imports
+
+public record RustEnumVariantTuple(java.util.List<org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustTupleField> fields) implements org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnumVariantFields {
+ public static org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnumVariantTuple.Builder arbitrary() {
+ return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnumVariantTuple.Builder(java.util.List.of());
+ }
+
+ public record Builder(java.util.List<org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustTupleField> fields) implements org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnumVariantFields.Builder {
+ public org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnumVariantTuple build() {
+ return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnumVariantTuple(fields);
+ }
+
+ public org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnumVariantTuple.Builder withFields(java.util.List<org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustTupleField> fields) {
+ return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnumVariantTuple.Builder(fields);
+ }
+
+ // Custom area start: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnumVariantTuple.Builder body
+ // Custom area end: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnumVariantTuple.Builder body
+ }
+
+ // Custom area start: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnumVariantTuple body
+ // Custom area end: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnumVariantTuple body
+}
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustItem.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustItem.java
index d1fa342..4471b49 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustItem.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustItem.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.RustItem imports
// Custom area end: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustItem imports
-public sealed interface RustItem permits org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustStructStruct {
+public sealed interface RustItem permits org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustEnum, org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustStructStruct {
public interface Builder {
public org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustItem build();
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustTupleField.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustTupleField.java
new file mode 100644
index 0000000..4a2eb76
--- /dev/null
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustTupleField.java
@@ -0,0 +1,32 @@
+// Generated by hobgoblin.
+
+package org.zwobble.hobgoblin.compiler.output.lang.rust.ast;
+
+// Custom area start: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustTupleField imports
+// Custom area end: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustTupleField imports
+
+public record RustTupleField(org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustType type) {
+ public static org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustTupleField.Builder arbitrary() {
+ return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustTupleField.Builder(org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustTypePath.arbitrary().build());
+ }
+
+ public record Builder(org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustType type) {
+ public org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustTupleField build() {
+ return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustTupleField(type);
+ }
+
+ public org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustTupleField.Builder withType(org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustType type) {
+ return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustTupleField.Builder(type);
+ }
+
+ public org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustTupleField.Builder withType(org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustType.Builder type) {
+ return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustTupleField.Builder(type.build());
+ }
+
+ // Custom area start: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustTupleField.Builder body
+ // Custom area end: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustTupleField.Builder body
+ }
+
+ // Custom area start: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustTupleField body
+ // Custom area end: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustTupleField body
+}