summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2026-08-28 13:38:37 +0100
committerMichael Williamson <mike@zwobble.org>2026-08-28 13:38:37 +0100
commit3749ba3c8d545400dc595dd9c973b6c409c27874 (patch)
tree6cc59d2f8d0617e1ea66d33b43e16e56b72ebe23
parent2acc93baf9964a310f8341a864e10b0bfcc30b9e (diff)
Include unrecognised variant tag in error message
-rw-r--r--examples/16-transient-0/output/rust/src/gen/data/transient_0.rs6
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatransient0/JavaTransient0Generator.java1
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttransient0/RustTransient0Generator.java28
3 files changed, 25 insertions, 10 deletions
diff --git a/examples/16-transient-0/output/rust/src/gen/data/transient_0.rs b/examples/16-transient-0/output/rust/src/gen/data/transient_0.rs
index 67a6a11..0731126 100644
--- a/examples/16-transient-0/output/rust/src/gen/data/transient_0.rs
+++ b/examples/16-transient-0/output/rust/src/gen/data/transient_0.rs
@@ -250,7 +250,7 @@ pub fn decode_enum_with_variants(reader: &mut impl ::std::io::Read, shared_value
0 => crate::data::EnumWithVariants::Zero,
1 => crate::data::EnumWithVariants::One,
2 => crate::data::EnumWithVariants::Two,
- _ => ::std::result::Result::Err(::std::io::Error::new(::std::io::ErrorKind::InvalidData, "unrecognised variant tag for data.EnumWithVariants"))?,
+ tag => ::std::result::Result::Err(::std::io::Error::new(::std::io::ErrorKind::InvalidData, format!("unrecognised variant tag for data.EnumWithVariants: {}", tag)))?,
})
}
@@ -284,7 +284,7 @@ pub fn decode_sum_with_variants(reader: &mut impl ::std::io::Read, shared_values
::std::io::Result::Ok(match &crate::transient_0::decode_int_32(reader, shared_values)? {
0 => crate::data::SumWithVariants::VariantOne(crate::data::transient_0::decode_variant_one(reader, shared_values)?),
1 => crate::data::SumWithVariants::VariantTwo(crate::data::transient_0::decode_variant_two(reader, shared_values)?),
- _ => ::std::result::Result::Err(::std::io::Error::new(::std::io::ErrorKind::InvalidData, "unrecognised variant tag for data.SumWithVariants"))?,
+ tag => ::std::result::Result::Err(::std::io::Error::new(::std::io::ErrorKind::InvalidData, format!("unrecognised variant tag for data.SumWithVariants: {}", tag)))?,
})
}
@@ -326,7 +326,7 @@ pub fn decode_sum_with_boxed_variants(reader: &mut impl ::std::io::Read, shared_
::std::io::Result::Ok(match &crate::transient_0::decode_int_32(reader, shared_values)? {
0 => crate::data::SumWithBoxedVariants::VariantOne(::std::boxed::Box::new(crate::data::transient_0::decode_variant_one(reader, shared_values)?)),
1 => crate::data::SumWithBoxedVariants::VariantTwo(::std::boxed::Box::new(crate::data::transient_0::decode_variant_two(reader, shared_values)?)),
- _ => ::std::result::Result::Err(::std::io::Error::new(::std::io::ErrorKind::InvalidData, "unrecognised variant tag for data.SumWithBoxedVariants"))?,
+ tag => ::std::result::Result::Err(::std::io::Error::new(::std::io::ErrorKind::InvalidData, format!("unrecognised variant tag for data.SumWithBoxedVariants: {}", tag)))?,
})
}
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatransient0/JavaTransient0Generator.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatransient0/JavaTransient0Generator.java
index 65bfdfe..5c4c22c 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatransient0/JavaTransient0Generator.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatransient0/JavaTransient0Generator.java
@@ -653,6 +653,7 @@ public class JavaTransient0Generator implements Generator {
enumDefinition.type(),
new JavaBlock(Stream.concat(
generateDecode(ordinal, NativeTypes.INT_32, context).stream(),
+ // TODO: handle ordinal not in array
Stream.of(new JavaReturn(new JavaArrayAccess(
new JavaRef(enumValues),
new JavaRef(ordinal)
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 354dfb5..46e0a5c 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
@@ -441,8 +441,11 @@ public class RustTransient0Generator implements Generator {
.collect(toArrayList());
decodeMatchArms.add(new RustMatchArm(
- new RustWildcardPattern(),
- new RustTryPropagationExpression(generateUnrecognisedVariantResult(enumDefinition.type()))
+ new RustIdentifierPattern(RustIdentifier.of("tag")),
+ new RustTryPropagationExpression(generateUnrecognisedVariantResult(
+ enumDefinition.type(),
+ RustPath.of("tag")
+ ))
));
return generateDecodeFunction(
@@ -584,8 +587,11 @@ public class RustTransient0Generator implements Generator {
.collect(toArrayList());
decodeMatchArms.add(new RustMatchArm(
- new RustWildcardPattern(),
- new RustTryPropagationExpression(generateUnrecognisedVariantResult(sumDefinition.type()))
+ new RustIdentifierPattern(RustIdentifier.of("tag")),
+ new RustTryPropagationExpression(generateUnrecognisedVariantResult(
+ sumDefinition.type(),
+ RustPath.of("tag")
+ ))
));
return generateDecodeFunction(
@@ -1347,7 +1353,10 @@ public class RustTransient0Generator implements Generator {
);
}
- private static RustCallExpression generateUnrecognisedVariantResult(Type type) {
+ private static RustCallExpression generateUnrecognisedVariantResult(
+ Type type,
+ RustExpression tag
+ ) {
return new RustCallExpression(
RustTypes.RESULT_ERR,
List.of(
@@ -1355,8 +1364,13 @@ public class RustTransient0Generator implements Generator {
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())
+ new RustCallExpression(
+ RustPath.of("format!"),
+ List.of(
+ new RustStringLiteral("unrecognised variant tag for " + type.describe() + ": {}"),
+ tag
+ )
+ )
)
)
)