From 39e34d4f524f5492065ba47b6cd33d5f272cd515 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sat, 8 Aug 2026 22:32:02 +0100 Subject: Partially support generic native types in java-transient-0 --- .../example/types/data/HobgoblinNativeData.java | 4 +++ .../data/transient0/HobgoblinTransient0Data.java | 34 ++++++++++++++++++++++ .../zwobble/example/types/transient0/Decoder.java | 13 +++++++++ .../zwobble/example/types/transient0/Encoder.java | 13 +++++++++ examples/15-transient-0/output/rust/src/data.rs | 7 +++++ .../15-transient-0/output/rust/src/gen/data.rs | 5 ++++ .../output/rust/src/gen/data/transient_0.rs | 10 +++++++ examples/15-transient-0/src/data.hob | 7 +++++ 8 files changed, 93 insertions(+) create mode 100644 examples/15-transient-0/output/java/src/main/java/org/zwobble/example/types/transient0/Decoder.java create mode 100644 examples/15-transient-0/output/java/src/main/java/org/zwobble/example/types/transient0/Encoder.java (limited to 'examples') diff --git a/examples/15-transient-0/output/java/src/main/java/org/zwobble/example/types/data/HobgoblinNativeData.java b/examples/15-transient-0/output/java/src/main/java/org/zwobble/example/types/data/HobgoblinNativeData.java index 012a091..32796b5 100644 --- a/examples/15-transient-0/output/java/src/main/java/org/zwobble/example/types/data/HobgoblinNativeData.java +++ b/examples/15-transient-0/output/java/src/main/java/org/zwobble/example/types/data/HobgoblinNativeData.java @@ -6,4 +6,8 @@ public class HobgoblinNativeData { public static Native arbitraryNative() { return new Native(0, 0); } + + public static GenericNative arbitraryGenericNative() { + throw new RuntimeException("TODO"); + } } diff --git a/examples/15-transient-0/output/java/src/main/java/org/zwobble/example/types/data/transient0/HobgoblinTransient0Data.java b/examples/15-transient-0/output/java/src/main/java/org/zwobble/example/types/data/transient0/HobgoblinTransient0Data.java index e6e3098..0044a4a 100644 --- a/examples/15-transient-0/output/java/src/main/java/org/zwobble/example/types/data/transient0/HobgoblinTransient0Data.java +++ b/examples/15-transient-0/output/java/src/main/java/org/zwobble/example/types/data/transient0/HobgoblinTransient0Data.java @@ -8,7 +8,10 @@ import java.io.IOException; import java.io.OutputStream; import java.util.List; import java.util.Map; +import org.zwobble.example.types.data.GenericNative; import org.zwobble.example.types.data.Native; +import org.zwobble.example.types.transient0.Decoder; +import org.zwobble.example.types.transient0.Encoder; import org.zwobble.example.types.transient0.HobgoblinTransient0Builtins; import org.zwobble.example.types.transient0.HobgoblinTransient0TaggedSharedValue; // Custom area end: org.zwobble.example.types.data.transient0.HobgoblinTransient0Data imports @@ -271,6 +274,15 @@ public final class HobgoblinTransient0Data { return new org.zwobble.example.types.data.StructWithNative(a); } + public static void encodeStructWithGenericNative(org.zwobble.example.types.data.StructWithGenericNative value, java.io.OutputStream outputStream, java.util.Map sharedValues) throws java.io.IOException { + org.zwobble.example.types.data.transient0.HobgoblinTransient0Data.encodeGenericNative(value.a(), outputStream, sharedValues, org.zwobble.example.types.transient0.HobgoblinTransient0Builtins::encodeInt32, org.zwobble.example.types.transient0.HobgoblinTransient0Builtins::encodeString); + } + + public static org.zwobble.example.types.data.StructWithGenericNative decodeStructWithGenericNative(java.io.InputStream inputStream, java.util.List sharedValues) throws java.io.IOException { + var a = org.zwobble.example.types.data.transient0.HobgoblinTransient0Data.decodeGenericNative(inputStream, sharedValues, org.zwobble.example.types.transient0.HobgoblinTransient0Builtins::decodeInt32, org.zwobble.example.types.transient0.HobgoblinTransient0Builtins::decodeString); + return new org.zwobble.example.types.data.StructWithGenericNative(a); + } + public static void encodeStructWithBox(org.zwobble.example.types.data.StructWithBox value, java.io.OutputStream outputStream, java.util.Map sharedValues) throws java.io.IOException { org.zwobble.example.types.data.transient0.HobgoblinTransient0Data.encodeStructWithInt32(value.inner(), outputStream, sharedValues); } @@ -504,5 +516,27 @@ public final class HobgoblinTransient0Data { var b = HobgoblinTransient0Builtins.decodeInt32(inputStream, sharedValues); return new Native(a, b); } + + public static void encodeGenericNative( + GenericNative value, + OutputStream outputStream, + Map sharedValues, + Encoder encoderA, + Encoder encoderB + ) throws IOException { + encoderA.encode(value.a(), outputStream, sharedValues); + encoderB.encode(value.b(), outputStream, sharedValues); + } + + public static GenericNative decodeGenericNative( + InputStream inputStream, + List sharedValues, + Decoder decoderA, + Decoder decoderB + ) throws IOException { + var a = decoderA.decode(inputStream, sharedValues); + var b = decoderB.decode(inputStream, sharedValues); + return new GenericNative(a, b); + } // Custom area end: org.zwobble.example.types.data.transient0.HobgoblinTransient0Data body } diff --git a/examples/15-transient-0/output/java/src/main/java/org/zwobble/example/types/transient0/Decoder.java b/examples/15-transient-0/output/java/src/main/java/org/zwobble/example/types/transient0/Decoder.java new file mode 100644 index 0000000..ad1a6d0 --- /dev/null +++ b/examples/15-transient-0/output/java/src/main/java/org/zwobble/example/types/transient0/Decoder.java @@ -0,0 +1,13 @@ +// Generated by hobgoblin. + +package org.zwobble.example.types.transient0; + +// Custom area start: org.zwobble.example.types.transient0.Decoder imports +// Custom area end: org.zwobble.example.types.transient0.Decoder imports + +public interface Decoder { + public T decode(java.io.InputStream inputStream, java.util.List sharedValues) throws java.io.IOException; + + // Custom area start: org.zwobble.example.types.transient0.Decoder body + // Custom area end: org.zwobble.example.types.transient0.Decoder body +} diff --git a/examples/15-transient-0/output/java/src/main/java/org/zwobble/example/types/transient0/Encoder.java b/examples/15-transient-0/output/java/src/main/java/org/zwobble/example/types/transient0/Encoder.java new file mode 100644 index 0000000..2ba43a6 --- /dev/null +++ b/examples/15-transient-0/output/java/src/main/java/org/zwobble/example/types/transient0/Encoder.java @@ -0,0 +1,13 @@ +// Generated by hobgoblin. + +package org.zwobble.example.types.transient0; + +// Custom area start: org.zwobble.example.types.transient0.Encoder imports +// Custom area end: org.zwobble.example.types.transient0.Encoder imports + +public interface Encoder { + public void encode(T value, java.io.OutputStream outputStream, java.util.Map sharedValues) throws java.io.IOException; + + // Custom area start: org.zwobble.example.types.transient0.Encoder body + // Custom area end: org.zwobble.example.types.transient0.Encoder body +} diff --git a/examples/15-transient-0/output/rust/src/data.rs b/examples/15-transient-0/output/rust/src/data.rs index 6078fd0..2cf748b 100644 --- a/examples/15-transient-0/output/rust/src/data.rs +++ b/examples/15-transient-0/output/rust/src/data.rs @@ -6,6 +6,13 @@ pub struct Native { pub b: i32, } +#[derive(Clone, Debug, Hash, PartialEq)] +pub struct GenericNative { + pub a: A, + pub b: B, +} + + pub mod transient_0 { use ::std::any::Any; use ::std::sync::Arc; diff --git a/examples/15-transient-0/output/rust/src/gen/data.rs b/examples/15-transient-0/output/rust/src/gen/data.rs index 745bc9d..856d60f 100644 --- a/examples/15-transient-0/output/rust/src/gen/data.rs +++ b/examples/15-transient-0/output/rust/src/gen/data.rs @@ -121,6 +121,11 @@ pub struct StructWithNative { pub a: crate::data::Native, } +#[derive(Clone, Debug, Hash, PartialEq)] +pub struct StructWithGenericNative { + pub a: crate::data::GenericNative::<::core::primitive::i32, ::std::string::String>, +} + #[derive(Clone, Debug, Hash, PartialEq)] pub struct StructWithBox { pub inner: ::std::boxed::Box::, diff --git a/examples/15-transient-0/output/rust/src/gen/data/transient_0.rs b/examples/15-transient-0/output/rust/src/gen/data/transient_0.rs index 5ef4811..c497b57 100644 --- a/examples/15-transient-0/output/rust/src/gen/data/transient_0.rs +++ b/examples/15-transient-0/output/rust/src/gen/data/transient_0.rs @@ -274,6 +274,16 @@ pub fn decode_struct_with_native(reader: &mut impl std::io::Read, shared_values: ::std::io::Result::Ok(crate::data::StructWithNative { a: a }) } +pub fn encode_struct_with_generic_native(value: &crate::data::StructWithGenericNative, writer: &mut impl std::io::Write, shared_values: &mut ::std::collections::HashMap::<::core::primitive::usize, ::core::primitive::i64>) -> ::std::io::Result::<()> { + todo!(); + ::std::io::Result::Ok(()) +} + +pub fn decode_struct_with_generic_native(reader: &mut impl std::io::Read, shared_values: &mut ::std::vec::Vec::<::std::sync::Arc::>) -> ::std::io::Result:: { + let a = todo!(); + ::std::io::Result::Ok(crate::data::StructWithGenericNative { a: a }) +} + pub fn encode_struct_with_box(value: &crate::data::StructWithBox, writer: &mut impl std::io::Write, shared_values: &mut ::std::collections::HashMap::<::core::primitive::usize, ::core::primitive::i64>) -> ::std::io::Result::<()> { crate::data::transient_0::encode_struct_with_int_32((&value.inner).as_ref(), writer, shared_values)?; ::std::io::Result::Ok(()) diff --git a/examples/15-transient-0/src/data.hob b/examples/15-transient-0/src/data.hob index bcc0ec1..1fb173e 100644 --- a/examples/15-transient-0/src/data.hob +++ b/examples/15-transient-0/src/data.hob @@ -83,6 +83,13 @@ struct StructWithNative { field a: Native; } +native GenericNative[A, B] { +} + +struct StructWithGenericNative { + field a: GenericNative[Int32, String]; +} + struct StructWithBox { field inner: Box[StructWithInt32]; } -- cgit v1.2.3