diff options
| -rw-r--r-- | examples/10-transient-0/output/rust/src/gen/transient_0.rs | 2 | ||||
| -rw-r--r-- | src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttransient0/RustTransient0Generator.java | 31 |
2 files changed, 28 insertions, 5 deletions
diff --git a/examples/10-transient-0/output/rust/src/gen/transient_0.rs b/examples/10-transient-0/output/rust/src/gen/transient_0.rs index 753dd23..e57324a 100644 --- a/examples/10-transient-0/output/rust/src/gen/transient_0.rs +++ b/examples/10-transient-0/output/rust/src/gen/transient_0.rs @@ -66,5 +66,5 @@ pub fn decode_string(reader: &mut impl std::io::Read) -> ::std::io::Result::<::s reader.read_exact(&mut bytes)?; bytes }; - std::io::Result::Ok((::std::string::String::from_utf8(bytes)).unwrap()) + std::io::Result::Ok((::std::string::String::from_utf8(bytes)).map_err(|error| ::std::io::Error::new(::std::io::ErrorKind::InvalidData, error))?) } 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 b53345e..4a37e4a 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 @@ -259,12 +259,35 @@ public class RustTransient0Generator implements Generator { generateReaderReadExact(RustPath.of(len)) ) ), - Optional.of(unwrap( + Optional.of( + new RustTryPropagationExpression(mapErr( + new RustCallExpression( + RustPath.global("std", "string", "String", "from_utf8"), + List.of(RustPath.of(bytes)) + ) + )) + ) + ) + ); + } + + private RustExpression mapErr(RustExpression result) { + var error = RustIdentifier.of("error"); + + return methodCall( + result, + RustIdentifier.of("map_err"), + List.of( + new RustClosureExpression( + List.of(new RustIdentifierPattern(error)), new RustCallExpression( - RustPath.global("std", "string", "String", "from_utf8"), - List.of(RustPath.of(bytes)) + RustPath.global("std", "io", "Error", "new"), + List.of( + RustPath.global("std", "io", "ErrorKind", "InvalidData"), + RustPath.of(error) + ) ) - )) + ) ) ); } |
