summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--examples/01-struct/output/rust/.gitignore1
-rw-r--r--examples/01-struct/output/rust/Cargo.lock7
-rw-r--r--examples/01-struct/output/rust/Cargo.toml6
-rw-r--r--examples/01-struct/output/rust/rust-toolchain.toml2
-rw-r--r--examples/01-struct/output/rust/src/main.rs9
-rw-r--r--examples/01-struct/output/rust/src/point.rs8
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/RustWriter.java2
-rw-r--r--src/test/java/org/zwobble/hobgoblin/compiler/ExampleTests.java5
-rw-r--r--src/test/java/org/zwobble/hobgoblin/compiler/output/lang/rust/RustWriterTests.java8
9 files changed, 38 insertions, 10 deletions
diff --git a/examples/01-struct/output/rust/.gitignore b/examples/01-struct/output/rust/.gitignore
new file mode 100644
index 0000000..ea8c4bf
--- /dev/null
+++ b/examples/01-struct/output/rust/.gitignore
@@ -0,0 +1 @@
+/target
diff --git a/examples/01-struct/output/rust/Cargo.lock b/examples/01-struct/output/rust/Cargo.lock
new file mode 100644
index 0000000..9dc6e3e
--- /dev/null
+++ b/examples/01-struct/output/rust/Cargo.lock
@@ -0,0 +1,7 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 4
+
+[[package]]
+name = "example"
+version = "0.1.0"
diff --git a/examples/01-struct/output/rust/Cargo.toml b/examples/01-struct/output/rust/Cargo.toml
new file mode 100644
index 0000000..5d4c622
--- /dev/null
+++ b/examples/01-struct/output/rust/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "example"
+version = "0.1.0"
+edition = "2024"
+
+[dependencies]
diff --git a/examples/01-struct/output/rust/rust-toolchain.toml b/examples/01-struct/output/rust/rust-toolchain.toml
new file mode 100644
index 0000000..4fedb95
--- /dev/null
+++ b/examples/01-struct/output/rust/rust-toolchain.toml
@@ -0,0 +1,2 @@
+[toolchain]
+channel = "1.96"
diff --git a/examples/01-struct/output/rust/src/main.rs b/examples/01-struct/output/rust/src/main.rs
new file mode 100644
index 0000000..0461817
--- /dev/null
+++ b/examples/01-struct/output/rust/src/main.rs
@@ -0,0 +1,9 @@
+mod point;
+
+use point::Point;
+
+fn main() {
+ let point: Point = Point { x: 10, y: 25 };
+ let x: i32 = point.x;
+ let y: i32 = point.y;
+}
diff --git a/examples/01-struct/output/rust/src/point.rs b/examples/01-struct/output/rust/src/point.rs
index 4a2b09c..aa90e19 100644
--- a/examples/01-struct/output/rust/src/point.rs
+++ b/examples/01-struct/output/rust/src/point.rs
@@ -1,9 +1,9 @@
pub struct Line {
- start: Point,
- end: Point,
+ pub start: Point,
+ pub end: Point,
}
pub struct Point {
- x: i32,
- y: i32,
+ pub x: i32,
+ pub y: i32,
}
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 16384a4..1ec1ca0 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
@@ -1,7 +1,6 @@
package org.zwobble.hobgoblin.compiler.output.lang.rust;
import org.zwobble.hobgoblin.compiler.output.CodeWriter;
-import org.zwobble.hobgoblin.compiler.output.lang.java.JavaWriter;
import org.zwobble.hobgoblin.compiler.output.lang.rust.ast.*;
import java.io.IOException;
@@ -71,6 +70,7 @@ public class RustWriter implements AutoCloseable {
for (var field : structStruct.fields()) {
this.writer.newLine();
+ this.writer.write("pub ");
this.writeIdentifier(field.name());
this.writer.write(": ");
this.writeType(field.type());
diff --git a/src/test/java/org/zwobble/hobgoblin/compiler/ExampleTests.java b/src/test/java/org/zwobble/hobgoblin/compiler/ExampleTests.java
index 55944f7..82a6ef3 100644
--- a/src/test/java/org/zwobble/hobgoblin/compiler/ExampleTests.java
+++ b/src/test/java/org/zwobble/hobgoblin/compiler/ExampleTests.java
@@ -27,12 +27,17 @@ public class ExampleTests {
HobgoblinCompiler.compile(exampleSet.path());
verifyJavaOutput(exampleSet);
+ verifyRustOutput(exampleSet);
}
private void verifyJavaOutput(ExampleSet exampleSet) throws NoSuchAlgorithmException, IOException, InterruptedException {
verifyOutput(exampleSet, "java", List.of("mvn", "compile"));
}
+ private void verifyRustOutput(ExampleSet exampleSet) throws NoSuchAlgorithmException, IOException, InterruptedException {
+ verifyOutput(exampleSet, "rust", List.of("cargo", "build"));
+ }
+
private void verifyOutput(
ExampleSet exampleSet,
String name,
diff --git a/src/test/java/org/zwobble/hobgoblin/compiler/output/lang/rust/RustWriterTests.java b/src/test/java/org/zwobble/hobgoblin/compiler/output/lang/rust/RustWriterTests.java
index bc6f55e..8062fb9 100644
--- a/src/test/java/org/zwobble/hobgoblin/compiler/output/lang/rust/RustWriterTests.java
+++ b/src/test/java/org/zwobble/hobgoblin/compiler/output/lang/rust/RustWriterTests.java
@@ -2,8 +2,6 @@ package org.zwobble.hobgoblin.compiler.output.lang.rust;
import org.junit.jupiter.api.Test;
import org.zwobble.hobgoblin.compiler.output.CodeWriter;
-import org.zwobble.hobgoblin.compiler.output.lang.java.JavaWriter;
-import org.zwobble.hobgoblin.compiler.output.lang.java.JavaWriterTests;
import org.zwobble.hobgoblin.compiler.output.lang.rust.ast.*;
import java.io.IOException;
@@ -54,7 +52,7 @@ public class RustWriterTests {
}
@Test
- public void emptyStructWithFields() throws IOException {
+ public void structWithFields() throws IOException {
var rust = new RustStructStruct(
new RustIdentifier("Rectangle"),
List.of(
@@ -67,8 +65,8 @@ public class RustWriterTests {
assertThat(string, equalTo("""
pub struct Rectangle {
- width: i32,
- height: i32,
+ pub width: i32,
+ pub height: i32,
}"""));
}