From 5113f2157c5aa257ad7ebf555cb6a551701d169a Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Mon, 10 Aug 2026 10:19:49 +0100 Subject: Add generic struct example without any outputs --- examples/12-native-type-generic/hobgoblin.json5 | 33 ++++++++++++++++++++++ .../12-native-type-generic/output/java/.gitignore | 2 ++ .../12-native-type-generic/output/java/pom.xml | 1 + .../example/types/map/HobgoblinNativeMap.java | 9 ++++++ .../test/java/org/zwobble/example/MapTests.java | 13 +++++++++ .../12-native-type-generic/output/rust/.gitignore | 1 + .../12-native-type-generic/output/rust/Cargo.lock | 7 +++++ .../12-native-type-generic/output/rust/Cargo.toml | 6 ++++ .../output/rust/rust-toolchain.toml | 2 ++ .../output/rust/src/gen/map.rs | 6 ++++ .../12-native-type-generic/output/rust/src/lib.rs | 12 ++++++++ .../12-native-type-generic/output/rust/src/map.rs | 1 + examples/12-native-type-generic/src/map.hob | 6 ++++ 13 files changed, 99 insertions(+) create mode 100644 examples/12-native-type-generic/hobgoblin.json5 create mode 100644 examples/12-native-type-generic/output/java/.gitignore create mode 120000 examples/12-native-type-generic/output/java/pom.xml create mode 100644 examples/12-native-type-generic/output/java/src/main/java/org/zwobble/example/types/map/HobgoblinNativeMap.java create mode 100644 examples/12-native-type-generic/output/java/src/test/java/org/zwobble/example/MapTests.java create mode 100644 examples/12-native-type-generic/output/rust/.gitignore create mode 100644 examples/12-native-type-generic/output/rust/Cargo.lock create mode 100644 examples/12-native-type-generic/output/rust/Cargo.toml create mode 100644 examples/12-native-type-generic/output/rust/rust-toolchain.toml create mode 100644 examples/12-native-type-generic/output/rust/src/gen/map.rs create mode 100644 examples/12-native-type-generic/output/rust/src/lib.rs create mode 100644 examples/12-native-type-generic/output/rust/src/map.rs create mode 100644 examples/12-native-type-generic/src/map.hob (limited to 'examples/12-native-type-generic') diff --git a/examples/12-native-type-generic/hobgoblin.json5 b/examples/12-native-type-generic/hobgoblin.json5 new file mode 100644 index 0000000..ca81993 --- /dev/null +++ b/examples/12-native-type-generic/hobgoblin.json5 @@ -0,0 +1,33 @@ +{ + outputs: { + langs: { + java: { + packageName: "org.zwobble.example.types", + nativeTypes: [ + { + hobgoblin: "map.NativeMap", + java: "java.util.Map", + }, + ], + }, + rust: { + nativeTypes: [ + { + hobgoblin: "map.NativeMap", + rust: "::std::collections::BTreeMap", + }, + ], + }, + }, + generators: [ + { + generator: "java-types", + path: "output/java/src/gen/java", + }, + { + generator: "rust-types", + path: "output/rust/src/gen", + }, + ], + }, +} diff --git a/examples/12-native-type-generic/output/java/.gitignore b/examples/12-native-type-generic/output/java/.gitignore new file mode 100644 index 0000000..ff511d4 --- /dev/null +++ b/examples/12-native-type-generic/output/java/.gitignore @@ -0,0 +1,2 @@ +/src/gen/ +/target/ diff --git a/examples/12-native-type-generic/output/java/pom.xml b/examples/12-native-type-generic/output/java/pom.xml new file mode 120000 index 0000000..445fa65 --- /dev/null +++ b/examples/12-native-type-generic/output/java/pom.xml @@ -0,0 +1 @@ +../../../templates/java-junit/pom.xml \ No newline at end of file diff --git a/examples/12-native-type-generic/output/java/src/main/java/org/zwobble/example/types/map/HobgoblinNativeMap.java b/examples/12-native-type-generic/output/java/src/main/java/org/zwobble/example/types/map/HobgoblinNativeMap.java new file mode 100644 index 0000000..309ba0b --- /dev/null +++ b/examples/12-native-type-generic/output/java/src/main/java/org/zwobble/example/types/map/HobgoblinNativeMap.java @@ -0,0 +1,9 @@ +package org.zwobble.example.types.map; + +public class HobgoblinNativeMap { + private HobgoblinNativeMap() {} + + public static java.util.Map arbitraryNativeMap() { + return new java.util.HashMap<>(); + } +} diff --git a/examples/12-native-type-generic/output/java/src/test/java/org/zwobble/example/MapTests.java b/examples/12-native-type-generic/output/java/src/test/java/org/zwobble/example/MapTests.java new file mode 100644 index 0000000..5b6a764 --- /dev/null +++ b/examples/12-native-type-generic/output/java/src/test/java/org/zwobble/example/MapTests.java @@ -0,0 +1,13 @@ +package org.zwobble.example; + +import java.util.Map; +import static org.junit.jupiter.api.Assertions.assertEquals; +import org.junit.jupiter.api.Test; +import org.zwobble.example.types.map.X; + +public class MapTests { + @Test + public void canUseGenericNativeTypes() { + var x = new X(Map.ofEntries(Map.entry("a", 1), Map.entry("b", 2))); + } +} diff --git a/examples/12-native-type-generic/output/rust/.gitignore b/examples/12-native-type-generic/output/rust/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/examples/12-native-type-generic/output/rust/.gitignore @@ -0,0 +1 @@ +/target diff --git a/examples/12-native-type-generic/output/rust/Cargo.lock b/examples/12-native-type-generic/output/rust/Cargo.lock new file mode 100644 index 0000000..9dc6e3e --- /dev/null +++ b/examples/12-native-type-generic/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/12-native-type-generic/output/rust/Cargo.toml b/examples/12-native-type-generic/output/rust/Cargo.toml new file mode 100644 index 0000000..5d4c622 --- /dev/null +++ b/examples/12-native-type-generic/output/rust/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "example" +version = "0.1.0" +edition = "2024" + +[dependencies] diff --git a/examples/12-native-type-generic/output/rust/rust-toolchain.toml b/examples/12-native-type-generic/output/rust/rust-toolchain.toml new file mode 100644 index 0000000..4fedb95 --- /dev/null +++ b/examples/12-native-type-generic/output/rust/rust-toolchain.toml @@ -0,0 +1,2 @@ +[toolchain] +channel = "1.96" diff --git a/examples/12-native-type-generic/output/rust/src/gen/map.rs b/examples/12-native-type-generic/output/rust/src/gen/map.rs new file mode 100644 index 0000000..5d9c837 --- /dev/null +++ b/examples/12-native-type-generic/output/rust/src/gen/map.rs @@ -0,0 +1,6 @@ +// Generated by hobgoblin. + +#[derive(Clone, Debug, Hash, PartialEq)] +pub struct X { + pub map: ::std::collections::BTreeMap::<::std::string::String, ::core::primitive::i32>, +} diff --git a/examples/12-native-type-generic/output/rust/src/lib.rs b/examples/12-native-type-generic/output/rust/src/lib.rs new file mode 100644 index 0000000..b0adf47 --- /dev/null +++ b/examples/12-native-type-generic/output/rust/src/lib.rs @@ -0,0 +1,12 @@ +mod map; + +#[cfg(test)] +mod test { + use std::collections::BTreeMap; + use super::map::X; + + #[test] + fn can_use_generic_native_types() { + let x = X { map: BTreeMap::from([("a".to_string(), 1), ("b".to_string(), 2)]) }; + } +} diff --git a/examples/12-native-type-generic/output/rust/src/map.rs b/examples/12-native-type-generic/output/rust/src/map.rs new file mode 100644 index 0000000..3dd0a72 --- /dev/null +++ b/examples/12-native-type-generic/output/rust/src/map.rs @@ -0,0 +1 @@ +include!("gen/map.rs"); diff --git a/examples/12-native-type-generic/src/map.hob b/examples/12-native-type-generic/src/map.hob new file mode 100644 index 0000000..0118889 --- /dev/null +++ b/examples/12-native-type-generic/src/map.hob @@ -0,0 +1,6 @@ +native NativeMap[K, V] { +} + +struct X { + field map: NativeMap[String, Int32]; +} -- cgit v1.2.3