From 6d87397a04e0cd35a5560b50de37c3a3ed550af0 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Thu, 2 Jul 2026 16:49:54 +0100 Subject: Handle boxing in Rust output --- examples/03-inductive-data-types/hobgoblin.json5 | 4 ++++ examples/03-inductive-data-types/output/rust/.gitignore | 1 + examples/03-inductive-data-types/output/rust/Cargo.lock | 7 +++++++ examples/03-inductive-data-types/output/rust/Cargo.toml | 6 ++++++ .../output/rust/rust-toolchain.toml | 2 ++ .../03-inductive-data-types/output/rust/src/arithmetic.rs | 15 +++++++++++++++ examples/03-inductive-data-types/output/rust/src/main.rs | 13 +++++++++++++ 7 files changed, 48 insertions(+) create mode 100644 examples/03-inductive-data-types/output/rust/.gitignore create mode 100644 examples/03-inductive-data-types/output/rust/Cargo.lock create mode 100644 examples/03-inductive-data-types/output/rust/Cargo.toml create mode 100644 examples/03-inductive-data-types/output/rust/rust-toolchain.toml create mode 100644 examples/03-inductive-data-types/output/rust/src/arithmetic.rs create mode 100644 examples/03-inductive-data-types/output/rust/src/main.rs (limited to 'examples/03-inductive-data-types') diff --git a/examples/03-inductive-data-types/hobgoblin.json5 b/examples/03-inductive-data-types/hobgoblin.json5 index 28269ad..12713d4 100644 --- a/examples/03-inductive-data-types/hobgoblin.json5 +++ b/examples/03-inductive-data-types/hobgoblin.json5 @@ -10,6 +10,10 @@ generator: "java-types", path: "output/java/src/gen/java", }, + { + generator: "rust-types", + path: "output/rust/src", + }, ], }, } diff --git a/examples/03-inductive-data-types/output/rust/.gitignore b/examples/03-inductive-data-types/output/rust/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/examples/03-inductive-data-types/output/rust/.gitignore @@ -0,0 +1 @@ +/target diff --git a/examples/03-inductive-data-types/output/rust/Cargo.lock b/examples/03-inductive-data-types/output/rust/Cargo.lock new file mode 100644 index 0000000..9dc6e3e --- /dev/null +++ b/examples/03-inductive-data-types/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/03-inductive-data-types/output/rust/Cargo.toml b/examples/03-inductive-data-types/output/rust/Cargo.toml new file mode 100644 index 0000000..5d4c622 --- /dev/null +++ b/examples/03-inductive-data-types/output/rust/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "example" +version = "0.1.0" +edition = "2024" + +[dependencies] diff --git a/examples/03-inductive-data-types/output/rust/rust-toolchain.toml b/examples/03-inductive-data-types/output/rust/rust-toolchain.toml new file mode 100644 index 0000000..4fedb95 --- /dev/null +++ b/examples/03-inductive-data-types/output/rust/rust-toolchain.toml @@ -0,0 +1,2 @@ +[toolchain] +channel = "1.96" diff --git a/examples/03-inductive-data-types/output/rust/src/arithmetic.rs b/examples/03-inductive-data-types/output/rust/src/arithmetic.rs new file mode 100644 index 0000000..ab4049d --- /dev/null +++ b/examples/03-inductive-data-types/output/rust/src/arithmetic.rs @@ -0,0 +1,15 @@ +// Generated by hobgoblin. + +pub enum Expression { + Add(std::boxed::Box), + Const(crate::arithmetic::Const), +} + +pub struct Add { + pub left: crate::arithmetic::Expression, + pub right: crate::arithmetic::Expression, +} + +pub struct Const { + pub value: i32, +} diff --git a/examples/03-inductive-data-types/output/rust/src/main.rs b/examples/03-inductive-data-types/output/rust/src/main.rs new file mode 100644 index 0000000..8c1f750 --- /dev/null +++ b/examples/03-inductive-data-types/output/rust/src/main.rs @@ -0,0 +1,13 @@ +mod arithmetic; + +use arithmetic::{Add, Const, Expression}; + +fn main() { + let expression = Expression::Add(Box::new(Add { + left: Expression::Add(Box::new(Add { + left: Expression::Const(Const { value: 42 }), + right: Expression::Const(Const { value: 47 }), + })), + right: Expression::Const(Const { value: 52 }), + })); +} -- cgit v1.2.3