From 526299753c3e19989b84e75b6d14eb1f43f1f546 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sun, 19 Jul 2026 21:51:38 +0100 Subject: Use match expression to encode Option values --- .../rusttransient0/RustTransient0Generator.java | 56 ++++++++++++---------- 1 file changed, 31 insertions(+), 25 deletions(-) (limited to 'src/main/java/org/zwobble') 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() + ) ) )); } -- cgit v1.2.3