diff options
Diffstat (limited to 'src/main')
| -rw-r--r-- | src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttransient0/RustTransient0Generator.java | 56 |
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() + ) ) )); } |
