diff options
| author | Michael Williamson <mike@zwobble.org> | 2026-07-14 19:07:06 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2026-07-14 19:07:06 +0100 |
| commit | f8cbdc16c4bdb4ee82a34cba92e1168700d3e005 (patch) | |
| tree | 486b801e1f0068c71752e57bbfd23cbd9f0a4f1f | |
| parent | 93453d01e6331f86765e6dd0eda487016172f6d5 (diff) | |
Add stubbed rust-transient-0 generator
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 { + + } +} |
