From 399aef569ddedcb58dcb394b394d55f20c78ee83 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sun, 2 Aug 2026 13:23:34 +0100 Subject: Don't panic on unrecognised sum variant tag --- .../rusttransient0/RustTransient0Generator.java | 32 ++++++++++++---------- 1 file changed, 18 insertions(+), 14 deletions(-) (limited to 'src/main/java/org') 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 fed710f..b70752e 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 @@ -379,19 +379,7 @@ public class RustTransient0Generator implements Generator { decodeMatchArms.add(new RustMatchArm( new RustWildcardPattern(), - new RustTryPropagationExpression(new RustCallExpression( - RustTypes.RESULT_ERR, - List.of( - new RustCallExpression( - RustTypes.IO_ERROR.addSegment(RustPathSegment.of("new")), - List.of( - RustTypes.IO_ERROR_KIND_INVALID_DATA, - // TODO: include variant tag - new RustStringLiteral("unrecognised variant tag for " + enumDefinition.type().describe()) - ) - ) - ) - )) + new RustTryPropagationExpression(generateUnrecognisedVariantResult(enumDefinition.type())) )); return generateDecodeFunction( @@ -512,7 +500,7 @@ public class RustTransient0Generator implements Generator { decodeMatchArms.add(new RustMatchArm( new RustWildcardPattern(), - generateTodo() + new RustTryPropagationExpression(generateUnrecognisedVariantResult(sumDefinition.type())) )); return generateDecodeFunction( @@ -1104,6 +1092,22 @@ public class RustTransient0Generator implements Generator { ); } + private static RustCallExpression generateUnrecognisedVariantResult(Type type) { + return new RustCallExpression( + RustTypes.RESULT_ERR, + List.of( + new RustCallExpression( + RustTypes.IO_ERROR.addSegment(RustPathSegment.of("new")), + List.of( + RustTypes.IO_ERROR_KIND_INVALID_DATA, + // TODO: include variant tag + new RustStringLiteral("unrecognised variant tag for " + type.describe()) + ) + ) + ) + ); + } + private RustExpression tryIntoOrInvalidData(RustExpression value) { return new RustTryPropagationExpression(mapErrToInvalidData( methodCall( -- cgit v1.2.3