diff options
| author | Michael Williamson <mike@zwobble.org> | 2026-07-24 23:04:36 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2026-07-24 23:04:36 +0100 |
| commit | d145fa46f2571d530d55937cf7907cced0a30347 (patch) | |
| tree | 0d71fa29e6d07a4f449031ee1a1a163a5b4b818e /src/main/java/org/zwobble | |
| parent | 6b3ca8e95a46fbf6f4d9bc5b4214386dd221c69c (diff) | |
Support Shared in rust-transient-0
Diffstat (limited to 'src/main/java/org/zwobble')
| -rw-r--r-- | src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttransient0/RustTransient0Generator.java | 22 |
1 files changed, 22 insertions, 0 deletions
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( |
