summaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttransient0/RustTransient0Generator.java22
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(