From 5d76fa1b86ff1bd15b9c6b546916bc03c9d9b9b4 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sat, 2 May 2026 09:33:20 +0100 Subject: Add example for sum types --- examples/02-sum/hobgoblin.json5 | 1 + examples/02-sum/output/java/.gitignore | 2 ++ examples/02-sum/output/java/pom.xml | 39 ++++++++++++++++++++++ .../src/main/java/org/zwobble/example/Main.java | 22 ++++++++++++ examples/02-sum/src/shapes.hob | 14 ++++++++ 5 files changed, 78 insertions(+) create mode 100644 examples/02-sum/hobgoblin.json5 create mode 100644 examples/02-sum/output/java/.gitignore create mode 100644 examples/02-sum/output/java/pom.xml create mode 100644 examples/02-sum/output/java/src/main/java/org/zwobble/example/Main.java create mode 100644 examples/02-sum/src/shapes.hob (limited to 'examples/02-sum') diff --git a/examples/02-sum/hobgoblin.json5 b/examples/02-sum/hobgoblin.json5 new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/examples/02-sum/hobgoblin.json5 @@ -0,0 +1 @@ +{} diff --git a/examples/02-sum/output/java/.gitignore b/examples/02-sum/output/java/.gitignore new file mode 100644 index 0000000..ff511d4 --- /dev/null +++ b/examples/02-sum/output/java/.gitignore @@ -0,0 +1,2 @@ +/src/gen/ +/target/ diff --git a/examples/02-sum/output/java/pom.xml b/examples/02-sum/output/java/pom.xml new file mode 100644 index 0000000..7493667 --- /dev/null +++ b/examples/02-sum/output/java/pom.xml @@ -0,0 +1,39 @@ + + 4.0.0 + + org.zwobble.hobgoblin.examples + example + 1.0-SNAPSHOT + + + UTF-8 + 25 + 25 + + + + + + org.codehaus.mojo + build-helper-maven-plugin + 3.6.1 + + + add-source + generate-sources + + add-source + + + + src/gen/java + + + + + + + + diff --git a/examples/02-sum/output/java/src/main/java/org/zwobble/example/Main.java b/examples/02-sum/output/java/src/main/java/org/zwobble/example/Main.java new file mode 100644 index 0000000..41522e6 --- /dev/null +++ b/examples/02-sum/output/java/src/main/java/org/zwobble/example/Main.java @@ -0,0 +1,22 @@ +package org.zwobble.example; + +import org.zwobble.example.types.shapes.Shape; +import org.zwobble.example.types.shapes.Rectangle; +import org.zwobble.example.types.shapes.Triangle; + +public class Main { + public static void main() { + Shape shape = createShape(); + var area = switch (shape) { + case Rectangle(var width, var height) -> + width * height; + + case Triangle(var width, var height) -> + width * height / 2; + }; + } + + private static Shape createShape() { + return new Rectangle(10, 25); + } +} diff --git a/examples/02-sum/src/shapes.hob b/examples/02-sum/src/shapes.hob new file mode 100644 index 0000000..08336c5 --- /dev/null +++ b/examples/02-sum/src/shapes.hob @@ -0,0 +1,14 @@ +sum Shape { + variant Rectangle; + variant Triangle; +} + +struct Rectangle { + field width: Int32; + field height: Int32; +} + +struct Triangle { + field width: Int32; + field height: Int32; +} -- cgit v1.2.3