summaryrefslogtreecommitdiff
path: root/examples/03-inductive-data-types
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2026-07-31 10:50:10 +0100
committerMichael Williamson <mike@zwobble.org>2026-07-31 10:50:10 +0100
commit578bf1f04b48f48225cfa794a27426cca4f6384a (patch)
treefc5c2737ffa65e20305f165a593111463a36166d /examples/03-inductive-data-types
parent1831d27671abe87bcbea5da40517093c37efb9b7 (diff)
Support singleton structs
Diffstat (limited to 'examples/03-inductive-data-types')
-rw-r--r--examples/03-inductive-data-types/hobgoblin.json519
-rw-r--r--examples/03-inductive-data-types/output/java/.gitignore2
l---------examples/03-inductive-data-types/output/java/pom.xml1
-rw-r--r--examples/03-inductive-data-types/output/java/src/main/java/org/zwobble/example/Arithmetic.java17
-rw-r--r--examples/03-inductive-data-types/output/java/src/test/java/org/zwobble/example/ArithmeticTests.java24
-rw-r--r--examples/03-inductive-data-types/output/rust/.gitignore1
-rw-r--r--examples/03-inductive-data-types/output/rust/Cargo.lock7
-rw-r--r--examples/03-inductive-data-types/output/rust/Cargo.toml6
-rw-r--r--examples/03-inductive-data-types/output/rust/rust-toolchain.toml2
-rw-r--r--examples/03-inductive-data-types/output/rust/src/arithmetic.rs30
-rw-r--r--examples/03-inductive-data-types/output/rust/src/lib.rs33
-rw-r--r--examples/03-inductive-data-types/src/arithmetic.hob13
12 files changed, 0 insertions, 155 deletions
diff --git a/examples/03-inductive-data-types/hobgoblin.json5 b/examples/03-inductive-data-types/hobgoblin.json5
deleted file mode 100644
index 12713d4..0000000
--- a/examples/03-inductive-data-types/hobgoblin.json5
+++ /dev/null
@@ -1,19 +0,0 @@
-{
- outputs: {
- langs: {
- java: {
- packageName: "org.zwobble.example.types",
- },
- },
- generators: [
- {
- 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/java/.gitignore b/examples/03-inductive-data-types/output/java/.gitignore
deleted file mode 100644
index ff511d4..0000000
--- a/examples/03-inductive-data-types/output/java/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-/src/gen/
-/target/
diff --git a/examples/03-inductive-data-types/output/java/pom.xml b/examples/03-inductive-data-types/output/java/pom.xml
deleted file mode 120000
index 445fa65..0000000
--- a/examples/03-inductive-data-types/output/java/pom.xml
+++ /dev/null
@@ -1 +0,0 @@
-../../../templates/java-junit/pom.xml \ No newline at end of file
diff --git a/examples/03-inductive-data-types/output/java/src/main/java/org/zwobble/example/Arithmetic.java b/examples/03-inductive-data-types/output/java/src/main/java/org/zwobble/example/Arithmetic.java
deleted file mode 100644
index 08cb75c..0000000
--- a/examples/03-inductive-data-types/output/java/src/main/java/org/zwobble/example/Arithmetic.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package org.zwobble.example;
-
-import org.zwobble.example.types.arithmetic.Add;
-import org.zwobble.example.types.arithmetic.Const;
-import org.zwobble.example.types.arithmetic.Expression;
-
-public class Arithmetic {
- public static int eval(Expression expression) {
- return switch (expression) {
- case Add(var left, var right) ->
- eval(left) + eval(right);
-
- case Const(var value) ->
- value;
- };
- }
-}
diff --git a/examples/03-inductive-data-types/output/java/src/test/java/org/zwobble/example/ArithmeticTests.java b/examples/03-inductive-data-types/output/java/src/test/java/org/zwobble/example/ArithmeticTests.java
deleted file mode 100644
index cd4fdd0..0000000
--- a/examples/03-inductive-data-types/output/java/src/test/java/org/zwobble/example/ArithmeticTests.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package org.zwobble.example;
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import org.junit.jupiter.api.Test;
-import org.zwobble.example.types.arithmetic.Add;
-import org.zwobble.example.types.arithmetic.Const;
-import org.zwobble.example.types.arithmetic.Expression;
-
-public class ArithmeticTests {
- @Test
- public void eval() {
- Expression expression = new Add(
- new Add(
- new Const(42),
- new Const(47)
- ),
- new Const(52)
- );
-
- int result = Arithmetic.eval(expression);
-
- assertEquals(result, 141);
- }
-}
diff --git a/examples/03-inductive-data-types/output/rust/.gitignore b/examples/03-inductive-data-types/output/rust/.gitignore
deleted file mode 100644
index ea8c4bf..0000000
--- a/examples/03-inductive-data-types/output/rust/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-/target
diff --git a/examples/03-inductive-data-types/output/rust/Cargo.lock b/examples/03-inductive-data-types/output/rust/Cargo.lock
deleted file mode 100644
index 9dc6e3e..0000000
--- a/examples/03-inductive-data-types/output/rust/Cargo.lock
+++ /dev/null
@@ -1,7 +0,0 @@
-# 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
deleted file mode 100644
index 5d4c622..0000000
--- a/examples/03-inductive-data-types/output/rust/Cargo.toml
+++ /dev/null
@@ -1,6 +0,0 @@
-[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
deleted file mode 100644
index 4fedb95..0000000
--- a/examples/03-inductive-data-types/output/rust/rust-toolchain.toml
+++ /dev/null
@@ -1,2 +0,0 @@
-[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
deleted file mode 100644
index 121c355..0000000
--- a/examples/03-inductive-data-types/output/rust/src/arithmetic.rs
+++ /dev/null
@@ -1,30 +0,0 @@
-// Generated by hobgoblin.
-
-#[derive(Debug, Hash, PartialEq)]
-pub enum Expression {
- Add(::std::boxed::Box::<crate::arithmetic::Add>),
- Const(crate::arithmetic::Const),
-}
-
-impl ::std::convert::From::<crate::arithmetic::Add> for crate::arithmetic::Expression {
- fn from(value: crate::arithmetic::Add) -> Self {
- Self::Add(::std::boxed::Box::new(value))
- }
-}
-
-impl ::std::convert::From::<crate::arithmetic::Const> for crate::arithmetic::Expression {
- fn from(value: crate::arithmetic::Const) -> Self {
- Self::Const(value)
- }
-}
-
-#[derive(Debug, Hash, PartialEq)]
-pub struct Add {
- pub left: crate::arithmetic::Expression,
- pub right: crate::arithmetic::Expression,
-}
-
-#[derive(Debug, Hash, PartialEq)]
-pub struct Const {
- pub value: ::core::primitive::i32,
-}
diff --git a/examples/03-inductive-data-types/output/rust/src/lib.rs b/examples/03-inductive-data-types/output/rust/src/lib.rs
deleted file mode 100644
index 3265e69..0000000
--- a/examples/03-inductive-data-types/output/rust/src/lib.rs
+++ /dev/null
@@ -1,33 +0,0 @@
-mod arithmetic;
-
-use arithmetic::{Const, Expression};
-
-fn eval(expression: &Expression) -> i32 {
- match expression {
- Expression::Add(add) =>
- eval(&add.left) + eval(&add.right),
-
- Expression::Const(Const { value }) =>
- *value,
- }
-}
-
-#[cfg(test)]
-mod test {
- use super::arithmetic::{Add, Const, Expression};
-
- #[test]
- fn eval() {
- let expression: Expression = Add {
- left: Add {
- left: Const { value: 42 }.into(),
- right: Const { value: 47 }.into(),
- }.into(),
- right: Const { value: 52 }.into(),
- }.into();
-
- let result = super::eval(&expression);
-
- assert_eq!(result, 141);
- }
-}
diff --git a/examples/03-inductive-data-types/src/arithmetic.hob b/examples/03-inductive-data-types/src/arithmetic.hob
deleted file mode 100644
index b1ef6e5..0000000
--- a/examples/03-inductive-data-types/src/arithmetic.hob
+++ /dev/null
@@ -1,13 +0,0 @@
-sum Expression {
- variant Add box;
- variant Const;
-}
-
-struct Add {
- field left: Expression;
- field right: Expression;
-}
-
-struct Const {
- field value: Int32;
-}