summaryrefslogtreecommitdiff
path: root/src/main/java/org
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org')
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttransient0/RustTransient0Generator.java56
1 files changed, 31 insertions, 25 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 165880f..da3c449 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
@@ -695,37 +695,43 @@ public class RustTransient0Generator implements Generator {
}
private RustStatement generateEncodeOption(RustExpression value, Type elementType) {
- // TODO: pattern matching
- return new RustExpressionStatement(new RustIfExpression(
- methodCall(value, RustIdentifier.of("is_some"), List.of()),
- new RustBlockExpression(
- List.of(
- generateEncode(
- new RustPrefixExpression(RustPrefixOperator.BORROW, new RustBoolLiteral(true)),
- NativeTypes.BOOL
+ return new RustExpressionStatement(new RustMatchExpression(
+ value,
+ List.of(
+ new RustMatchArm(
+ new RustTupleStructPattern(
+ RustPath.global("std", "option", "Option", "Some"),
+ List.of(new RustIdentifierPattern(VALUE_NAME))
),
- generateEncode(
- new RustPrefixExpression(
- RustPrefixOperator.BORROW,
- methodCall(
- methodCall(value, RustIdentifier.of("as_ref"), List.of()),
- RustIdentifier.of("unwrap"),
- List.of()
+ new RustBlockExpression(
+ List.of(
+ generateEncode(
+ new RustPrefixExpression(RustPrefixOperator.BORROW, new RustBoolLiteral(true)),
+ NativeTypes.BOOL
+ ),
+ generateEncode(
+ new RustPrefixExpression(
+ RustPrefixOperator.BORROW,
+ RustPath.of(VALUE_NAME)
+ ),
+ elementType
)
),
- elementType
+ Optional.empty()
)
),
- Optional.empty()
- ),
- new RustBlockExpression(
- List.of(
- generateEncode(
- new RustPrefixExpression(RustPrefixOperator.BORROW, new RustBoolLiteral(false)),
- NativeTypes.BOOL
+ new RustMatchArm(
+ new RustPathPattern(RustPath.global("std", "option", "Option", "None")),
+ new RustBlockExpression(
+ List.of(
+ generateEncode(
+ new RustPrefixExpression(RustPrefixOperator.BORROW, new RustBoolLiteral(false)),
+ NativeTypes.BOOL
+ )
+ ),
+ Optional.empty()
)
- ),
- Optional.empty()
+ )
)
));
}