summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--examples/14-transient-0/output/rust/src/gen/data/transient_0.rs2
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttransient0/RustTransient0Generator.java14
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/RustTypes.java3
3 files changed, 17 insertions, 2 deletions
diff --git a/examples/14-transient-0/output/rust/src/gen/data/transient_0.rs b/examples/14-transient-0/output/rust/src/gen/data/transient_0.rs
index 765341e..541d9eb 100644
--- a/examples/14-transient-0/output/rust/src/gen/data/transient_0.rs
+++ b/examples/14-transient-0/output/rust/src/gen/data/transient_0.rs
@@ -172,7 +172,7 @@ pub fn decode_enum_with_variants(reader: &mut impl std::io::Read, shared_values:
0 => crate::data::EnumWithVariants::Zero,
1 => crate::data::EnumWithVariants::One,
2 => crate::data::EnumWithVariants::Two,
- _ => todo!(),
+ _ => ::std::result::Result::Err(::std::io::Error::new(::std::io::ErrorKind::InvalidData, "unrecognised variant tag"))?,
})
}
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 20b21de..ec39245 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,7 +379,19 @@ public class RustTransient0Generator implements Generator {
decodeMatchArms.add(new RustMatchArm(
new RustWildcardPattern(),
- generateTodo()
+ 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")
+ )
+ )
+ )
+ ))
));
return generateDecodeFunction(
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/RustTypes.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/RustTypes.java
index 5e6303a..3c5ab6c 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/RustTypes.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/RustTypes.java
@@ -49,6 +49,9 @@ public class RustTypes {
public static RustPath NONE = RustPath.global("std", "option", "Option", "None");
public static RustPath SOME = RustPath.global("std", "option", "Option", "Some");
+ public static RustPath RESULT = RustPath.global("std", "result", "Result");
+ public static RustPath RESULT_ERR = RESULT.addSegment(RustPathSegment.of("Err"));
+
public static RustPath STRING = RustPath.global("std", "string", "String");
public static RustPath ARC = RustPath.global("std", "sync", "Arc");