From 6e73cc0501e63fe9361b24a20d70a5a18857ef0d Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sun, 26 Jul 2026 11:54:00 +0100 Subject: Remove unwrap --- .../11-transient-0/output/rust/src/gen/data/transient_0.rs | 12 ++++++------ .../generators/rusttransient0/RustTransient0Generator.java | 14 +++++++++----- 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/examples/11-transient-0/output/rust/src/gen/data/transient_0.rs b/examples/11-transient-0/output/rust/src/gen/data/transient_0.rs index 6ee8baf..7f82820 100644 --- a/examples/11-transient-0/output/rust/src/gen/data/transient_0.rs +++ b/examples/11-transient-0/output/rust/src/gen/data/transient_0.rs @@ -253,7 +253,7 @@ pub fn decode_struct_with_list_of_shared(reader: &mut impl std::io::Read, shared elements.push({ let id = crate::transient_0::decode_int_64(reader, shared_values)?; if id < ((shared_values.len()).try_into()).map_err(|error| ::std::io::Error::new(::std::io::ErrorKind::InvalidData, error))? { - ((::std::sync::Arc::clone(&shared_values[id as ::core::primitive::usize])).downcast()).unwrap() + ((::std::sync::Arc::clone(&shared_values[id as ::core::primitive::usize])).downcast()).map_err(|error| ::std::io::Error::new(::std::io::ErrorKind::InvalidData, "referenced value has wrong type"))? } else { let decoded_value = ::std::sync::Arc::new(crate::data::transient_0::decode_struct_with_int_32(reader, shared_values)?); shared_values.push(::std::sync::Arc::clone(&decoded_value) as ::std::sync::Arc::); @@ -316,7 +316,7 @@ pub fn decode_struct_with_different_shared_types(reader: &mut impl std::io::Read let a = { let id = crate::transient_0::decode_int_64(reader, shared_values)?; if id < ((shared_values.len()).try_into()).map_err(|error| ::std::io::Error::new(::std::io::ErrorKind::InvalidData, error))? { - ((::std::sync::Arc::clone(&shared_values[id as ::core::primitive::usize])).downcast()).unwrap() + ((::std::sync::Arc::clone(&shared_values[id as ::core::primitive::usize])).downcast()).map_err(|error| ::std::io::Error::new(::std::io::ErrorKind::InvalidData, "referenced value has wrong type"))? } else { let decoded_value = ::std::sync::Arc::new(crate::data::transient_0::decode_struct_with_int_32(reader, shared_values)?); shared_values.push(::std::sync::Arc::clone(&decoded_value) as ::std::sync::Arc::); @@ -326,7 +326,7 @@ pub fn decode_struct_with_different_shared_types(reader: &mut impl std::io::Read let b = { let id = crate::transient_0::decode_int_64(reader, shared_values)?; if id < ((shared_values.len()).try_into()).map_err(|error| ::std::io::Error::new(::std::io::ErrorKind::InvalidData, error))? { - ((::std::sync::Arc::clone(&shared_values[id as ::core::primitive::usize])).downcast()).unwrap() + ((::std::sync::Arc::clone(&shared_values[id as ::core::primitive::usize])).downcast()).map_err(|error| ::std::io::Error::new(::std::io::ErrorKind::InvalidData, "referenced value has wrong type"))? } else { let decoded_value = ::std::sync::Arc::new(crate::data::transient_0::decode_struct_with_int_64(reader, shared_values)?); shared_values.push(::std::sync::Arc::clone(&decoded_value) as ::std::sync::Arc::); @@ -336,7 +336,7 @@ pub fn decode_struct_with_different_shared_types(reader: &mut impl std::io::Read let c = { let id = crate::transient_0::decode_int_64(reader, shared_values)?; if id < ((shared_values.len()).try_into()).map_err(|error| ::std::io::Error::new(::std::io::ErrorKind::InvalidData, error))? { - ((::std::sync::Arc::clone(&shared_values[id as ::core::primitive::usize])).downcast()).unwrap() + ((::std::sync::Arc::clone(&shared_values[id as ::core::primitive::usize])).downcast()).map_err(|error| ::std::io::Error::new(::std::io::ErrorKind::InvalidData, "referenced value has wrong type"))? } else { let decoded_value = ::std::sync::Arc::new(crate::data::transient_0::decode_struct_with_int_32(reader, shared_values)?); shared_values.push(::std::sync::Arc::clone(&decoded_value) as ::std::sync::Arc::); @@ -382,7 +382,7 @@ pub fn decode_struct_with_shared_sum_and_variant(reader: &mut impl std::io::Read let a = { let id = crate::transient_0::decode_int_64(reader, shared_values)?; if id < ((shared_values.len()).try_into()).map_err(|error| ::std::io::Error::new(::std::io::ErrorKind::InvalidData, error))? { - ((::std::sync::Arc::clone(&shared_values[id as ::core::primitive::usize])).downcast()).unwrap() + ((::std::sync::Arc::clone(&shared_values[id as ::core::primitive::usize])).downcast()).map_err(|error| ::std::io::Error::new(::std::io::ErrorKind::InvalidData, "referenced value has wrong type"))? } else { let decoded_value = ::std::sync::Arc::new(crate::data::transient_0::decode_sum_with_variants(reader, shared_values)?); shared_values.push(::std::sync::Arc::clone(&decoded_value) as ::std::sync::Arc::); @@ -392,7 +392,7 @@ pub fn decode_struct_with_shared_sum_and_variant(reader: &mut impl std::io::Read let b = { let id = crate::transient_0::decode_int_64(reader, shared_values)?; if id < ((shared_values.len()).try_into()).map_err(|error| ::std::io::Error::new(::std::io::ErrorKind::InvalidData, error))? { - ((::std::sync::Arc::clone(&shared_values[id as ::core::primitive::usize])).downcast()).unwrap() + ((::std::sync::Arc::clone(&shared_values[id as ::core::primitive::usize])).downcast()).map_err(|error| ::std::io::Error::new(::std::io::ErrorKind::InvalidData, "referenced value has wrong type"))? } else { let decoded_value = ::std::sync::Arc::new(crate::data::transient_0::decode_variant_one(reader, shared_values)?); shared_values.push(::std::sync::Arc::clone(&decoded_value) as ::std::sync::Arc::); 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 e37a974..6f8de50 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 @@ -898,7 +898,7 @@ public class RustTransient0Generator implements Generator { new RustBlockExpression( List.of(), Optional.of( - methodCall( + new RustTryPropagationExpression(mapErr( methodCall( new RustCallExpression( RustTypes.ARC.addSegment(RustPathSegment.of("clone")), @@ -913,10 +913,14 @@ public class RustTransient0Generator implements Generator { RustIdentifier.of("downcast"), List.of() ), - // TODO: remove unwrap - RustIdentifier.of("unwrap"), - List.of() - ) + _ -> new RustCallExpression( + RustPath.global("std", "io", "Error", "new"), + List.of( + RustPath.global("std", "io", "ErrorKind", "InvalidData"), + new RustStringLiteral("referenced value has wrong type") + ) + ) + )) ) ), new RustBlockExpression( -- cgit v1.2.3