From d145fa46f2571d530d55937cf7907cced0a30347 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Fri, 24 Jul 2026 23:04:36 +0100 Subject: Support Shared in rust-transient-0 --- .../rusttransient0/RustTransient0Generator.java | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'src/main/java/org') diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttransient0/RustTransient0Generator.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttransient0/RustTransient0Generator.java index 72fff82..9a3ef32 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttransient0/RustTransient0Generator.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttransient0/RustTransient0Generator.java @@ -552,6 +552,8 @@ public class RustTransient0Generator implements Generator { yield generateEncodeList(value, constructedNativeType.args().getFirst()); } else if (constructedNativeType.constructor().equals(NativeTypes.OPTION)) { yield generateEncodeOption(value, constructedNativeType.args().getFirst()); + } else if (constructedNativeType.constructor().equals(NativeTypes.SHARED)) { + yield generateEncodeShared(value, constructedNativeType.args().getFirst()); } else { yield new RustExpressionStatement(generateTodo()); } @@ -590,6 +592,8 @@ public class RustTransient0Generator implements Generator { yield generateDecodeList(constructedNativeType.args().getFirst()); } else if (constructedNativeType.constructor().equals(NativeTypes.OPTION)) { yield generateDecodeOption(constructedNativeType.args().getFirst()); + } else if (constructedNativeType.constructor().equals(NativeTypes.SHARED)) { + yield generateDecodeShared(constructedNativeType.args().getFirst()); } else { yield generateTodo(); } @@ -778,6 +782,24 @@ public class RustTransient0Generator implements Generator { ); } + private RustStatement generateEncodeShared(RustExpression value, Type type) { + return generateEncode( + new RustCallExpression( + new RustFieldExpression(value, RustIdentifier.of("as_ref")), + List.of() + ), + type + ); + } + + private RustExpression generateDecodeShared(Type type) { + var value = generateDecode(type); + return new RustCallExpression( + RustPath.global("std", "sync", "Arc", "new"), + List.of(value) + ); + } + private RustExpression generateWriterWrite(RustExpression valueToWrite) { return new RustTryPropagationExpression(new RustCallExpression( new RustFieldExpression( -- cgit v1.2.3