summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--examples/04-native-type/hobgoblin.json54
-rw-r--r--examples/04-native-type/output/rust/.gitignore1
-rw-r--r--examples/04-native-type/output/rust/Cargo.lock7
-rw-r--r--examples/04-native-type/output/rust/Cargo.toml6
-rw-r--r--examples/04-native-type/output/rust/rust-toolchain.toml2
-rw-r--r--examples/04-native-type/output/rust/src/gen/point.rs5
-rw-r--r--examples/04-native-type/output/rust/src/main.rs7
-rw-r--r--examples/04-native-type/output/rust/src/point.rs3
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttypes/RustTypesGenerator.java8
9 files changed, 41 insertions, 2 deletions
diff --git a/examples/04-native-type/hobgoblin.json5 b/examples/04-native-type/hobgoblin.json5
index 651afad..8f92e51 100644
--- a/examples/04-native-type/hobgoblin.json5
+++ b/examples/04-native-type/hobgoblin.json5
@@ -5,5 +5,9 @@
path: "output/java/src/gen/java",
packageName: "org.zwobble.example.types",
},
+ {
+ generator: "rust-types",
+ path: "output/rust/src/gen",
+ },
],
}
diff --git a/examples/04-native-type/output/rust/.gitignore b/examples/04-native-type/output/rust/.gitignore
new file mode 100644
index 0000000..ea8c4bf
--- /dev/null
+++ b/examples/04-native-type/output/rust/.gitignore
@@ -0,0 +1 @@
+/target
diff --git a/examples/04-native-type/output/rust/Cargo.lock b/examples/04-native-type/output/rust/Cargo.lock
new file mode 100644
index 0000000..9dc6e3e
--- /dev/null
+++ b/examples/04-native-type/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/04-native-type/output/rust/Cargo.toml b/examples/04-native-type/output/rust/Cargo.toml
new file mode 100644
index 0000000..5d4c622
--- /dev/null
+++ b/examples/04-native-type/output/rust/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "example"
+version = "0.1.0"
+edition = "2024"
+
+[dependencies]
diff --git a/examples/04-native-type/output/rust/rust-toolchain.toml b/examples/04-native-type/output/rust/rust-toolchain.toml
new file mode 100644
index 0000000..4fedb95
--- /dev/null
+++ b/examples/04-native-type/output/rust/rust-toolchain.toml
@@ -0,0 +1,2 @@
+[toolchain]
+channel = "1.96"
diff --git a/examples/04-native-type/output/rust/src/gen/point.rs b/examples/04-native-type/output/rust/src/gen/point.rs
new file mode 100644
index 0000000..c2940f5
--- /dev/null
+++ b/examples/04-native-type/output/rust/src/gen/point.rs
@@ -0,0 +1,5 @@
+/// A straight line from one point to another.
+pub struct Line {
+ pub start: crate::point::Point,
+ pub end: crate::point::Point,
+}
diff --git a/examples/04-native-type/output/rust/src/main.rs b/examples/04-native-type/output/rust/src/main.rs
new file mode 100644
index 0000000..4bd1cd0
--- /dev/null
+++ b/examples/04-native-type/output/rust/src/main.rs
@@ -0,0 +1,7 @@
+mod point;
+
+use point::{Line, Point};
+
+fn main() {
+ let line = Line { start: Point(10, 25), end: Point(25, 10) };
+}
diff --git a/examples/04-native-type/output/rust/src/point.rs b/examples/04-native-type/output/rust/src/point.rs
new file mode 100644
index 0000000..bc04e56
--- /dev/null
+++ b/examples/04-native-type/output/rust/src/point.rs
@@ -0,0 +1,3 @@
+include!("gen/point.rs");
+
+pub struct Point(pub i32, pub i32);
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttypes/RustTypesGenerator.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttypes/RustTypesGenerator.java
index b71c9ed..3847433 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttypes/RustTypesGenerator.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttypes/RustTypesGenerator.java
@@ -184,8 +184,12 @@ public class RustTypesGenerator implements Generator {
case SimpleNativeType simpleNativeType -> {
yield this.config.nativeTypeConfig(simpleNativeType)
- .orElseThrow(() -> new UnsupportedOperationException("TODO"))
- .type();
+ .map(config -> config.type())
+ .orElseGet(() -> generateTypePath(
+ simpleNativeType.namespaceName(),
+ simpleNativeType.name(),
+ context
+ ));
}
case StructType structType -> {