summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2026-07-14 19:07:06 +0100
committerMichael Williamson <mike@zwobble.org>2026-07-14 19:07:06 +0100
commitf8cbdc16c4bdb4ee82a34cba92e1168700d3e005 (patch)
tree486b801e1f0068c71752e57bbfd23cbd9f0a4f1f
parent93453d01e6331f86765e6dd0eda487016172f6d5 (diff)
Add stubbed rust-transient-0 generator
-rw-r--r--examples/10-transient-0/hobgoblin.json58
-rw-r--r--examples/10-transient-0/output/rust/.gitignore1
-rw-r--r--examples/10-transient-0/output/rust/Cargo.lock7
-rw-r--r--examples/10-transient-0/output/rust/Cargo.toml6
-rw-r--r--examples/10-transient-0/output/rust/rust-toolchain.toml2
-rw-r--r--examples/10-transient-0/output/rust/src/data.rs72
-rw-r--r--examples/10-transient-0/output/rust/src/main.rs5
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/config/ProjectConfig.java4
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttransient0/RustTransient0Generator.java45
9 files changed, 150 insertions, 0 deletions
diff --git a/examples/10-transient-0/hobgoblin.json5 b/examples/10-transient-0/hobgoblin.json5
index f3e455d..37617ed 100644
--- a/examples/10-transient-0/hobgoblin.json5
+++ b/examples/10-transient-0/hobgoblin.json5
@@ -14,6 +14,14 @@
generator: "java-transient-0",
path: "output/java/src/gen/java",
},
+ {
+ generator: "rust-types",
+ path: "output/rust/src",
+ },
+ {
+ generator: "rust-transient-0",
+ path: "output/rust/src",
+ }
],
}
}
diff --git a/examples/10-transient-0/output/rust/.gitignore b/examples/10-transient-0/output/rust/.gitignore
new file mode 100644
index 0000000..ea8c4bf
--- /dev/null
+++ b/examples/10-transient-0/output/rust/.gitignore
@@ -0,0 +1 @@
+/target
diff --git a/examples/10-transient-0/output/rust/Cargo.lock b/examples/10-transient-0/output/rust/Cargo.lock
new file mode 100644
index 0000000..9dc6e3e
--- /dev/null
+++ b/examples/10-transient-0/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/10-transient-0/output/rust/Cargo.toml b/examples/10-transient-0/output/rust/Cargo.toml
new file mode 100644
index 0000000..5d4c622
--- /dev/null
+++ b/examples/10-transient-0/output/rust/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "example"
+version = "0.1.0"
+edition = "2024"
+
+[dependencies]
diff --git a/examples/10-transient-0/output/rust/rust-toolchain.toml b/examples/10-transient-0/output/rust/rust-toolchain.toml
new file mode 100644
index 0000000..4fedb95
--- /dev/null
+++ b/examples/10-transient-0/output/rust/rust-toolchain.toml
@@ -0,0 +1,2 @@
+[toolchain]
+channel = "1.96"
diff --git a/examples/10-transient-0/output/rust/src/data.rs b/examples/10-transient-0/output/rust/src/data.rs
new file mode 100644
index 0000000..81b0335
--- /dev/null
+++ b/examples/10-transient-0/output/rust/src/data.rs
@@ -0,0 +1,72 @@
+// Generated by hobgoblin.
+
+pub struct StructWithBool {
+ pub a: ::core::primitive::bool,
+ pub b: ::core::primitive::bool,
+}
+
+pub struct StructWithInt32 {
+ pub a: ::core::primitive::i32,
+ pub b: ::core::primitive::i32,
+}
+
+pub struct StructWithInt64 {
+ pub a: ::core::primitive::i64,
+ pub b: ::core::primitive::i64,
+}
+
+pub struct StructWithString {
+ pub a: ::std::string::String,
+ pub b: ::std::string::String,
+}
+
+pub struct OuterStruct {
+ pub inner: crate::data::InnerStruct,
+ pub c: ::core::primitive::i32,
+}
+
+pub struct InnerStruct {
+ pub a: ::core::primitive::i32,
+ pub b: ::core::primitive::i32,
+}
+
+pub struct StructWithList {
+ pub a: ::std::vec::Vec<::core::primitive::i64>,
+ pub b: ::std::vec::Vec<crate::data::InnerStruct>,
+}
+
+pub struct StructWithOption {
+ pub a: ::std::option::Option<::core::primitive::i64>,
+ pub b: ::std::option::Option<crate::data::InnerStruct>,
+}
+
+pub enum EnumWithVariants {
+ Zero,
+ One,
+ Two,
+}
+
+pub enum SumWithVariants {
+ VariantOne(crate::data::VariantOne),
+ VariantTwo(crate::data::VariantTwo),
+}
+
+impl ::std::convert::From<crate::data::VariantOne> for crate::data::SumWithVariants {
+ fn from(value: crate::data::VariantOne) -> Self {
+ Self::VariantOne(value)
+ }
+}
+
+impl ::std::convert::From<crate::data::VariantTwo> for crate::data::SumWithVariants {
+ fn from(value: crate::data::VariantTwo) -> Self {
+ Self::VariantTwo(value)
+ }
+}
+
+pub struct VariantOne {
+ pub a: ::core::primitive::i32,
+}
+
+pub struct VariantTwo {
+ pub a: ::core::primitive::i64,
+}
diff --git a/examples/10-transient-0/output/rust/src/main.rs b/examples/10-transient-0/output/rust/src/main.rs
new file mode 100644
index 0000000..32b5edf
--- /dev/null
+++ b/examples/10-transient-0/output/rust/src/main.rs
@@ -0,0 +1,5 @@
+mod data;
+
+#[cfg(test)]
+mod test {
+}
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/config/ProjectConfig.java b/src/main/java/org/zwobble/hobgoblin/compiler/config/ProjectConfig.java
index 8a2ab9e..04d9cdd 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/config/ProjectConfig.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/config/ProjectConfig.java
@@ -5,6 +5,7 @@ import org.zwobble.hobgoblin.compiler.output.generators.errors.UnknownGeneratorE
import org.zwobble.hobgoblin.compiler.output.generators.javapreciselymatchers.JavaPreciselyMatchersGenerator;
import org.zwobble.hobgoblin.compiler.output.generators.javatransient0.JavaTransient0Generator;
import org.zwobble.hobgoblin.compiler.output.generators.javatypes.JavaTypesGenerator;
+import org.zwobble.hobgoblin.compiler.output.generators.rusttransient0.RustTransient0Generator;
import org.zwobble.hobgoblin.compiler.output.generators.rusttypes.RustTypesGenerator;
import org.zwobble.hobgoblin.compiler.sources.FileFragmentSource;
import org.zwobble.json5.reader.Json5ObjectReader;
@@ -52,6 +53,9 @@ public record ProjectConfig(
case RustTypesGenerator.NAME ->
RustTypesGenerator.parseGeneratorConfig(projectRoot, generatorJson, langsJson);
+ case RustTransient0Generator.NAME ->
+ RustTransient0Generator.parseGeneratorConfig(projectRoot, generatorJson, langsJson);
+
default ->
throw new UnknownGeneratorError(
generatorName.value(),
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttransient0/RustTransient0Generator.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttransient0/RustTransient0Generator.java
new file mode 100644
index 0000000..822f229
--- /dev/null
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttransient0/RustTransient0Generator.java
@@ -0,0 +1,45 @@
+package org.zwobble.hobgoblin.compiler.output.generators.rusttransient0;
+
+import org.zwobble.hobgoblin.compiler.ast.typed.TypedNamespaceNode;
+import org.zwobble.hobgoblin.compiler.config.OutputConfig;
+import org.zwobble.hobgoblin.compiler.output.generators.Generator;
+import org.zwobble.hobgoblin.compiler.output.generators.rust.RustGeneratorConfig;
+import org.zwobble.hobgoblin.compiler.typechecker.TypesInfo;
+import org.zwobble.json5.reader.Json5ObjectReader;
+
+import java.io.IOException;
+import java.nio.file.Path;
+import java.util.List;
+import java.util.Optional;
+
+public class RustTransient0Generator implements Generator {
+ public static final String NAME = "rust-transient-0";
+
+ public static OutputConfig parseGeneratorConfig(
+ Path projectRoot,
+ Json5ObjectReader output,
+ Optional<Json5ObjectReader> langsJson
+ ) {
+ return () -> {
+ var relativeOutputPath = output.getString("path").value();
+ var outputPath = projectRoot.resolve(relativeOutputPath);
+
+ var rustConfig = RustGeneratorConfig.parseLangsConfig(langsJson);
+
+ return new RustTransient0Generator(outputPath, rustConfig);
+ };
+ }
+
+ private final Path outputPath;
+ private final RustGeneratorConfig config;
+
+ private RustTransient0Generator(Path outputPath, RustGeneratorConfig config) {
+ this.outputPath = outputPath;
+ this.config = config;
+ }
+
+ @Override
+ public void generate(List<TypedNamespaceNode> namespaces, TypesInfo typesInfo) throws IOException {
+
+ }
+}