diff options
| author | Michael Williamson <mike@zwobble.org> | 2026-07-26 11:54:00 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2026-07-26 11:54:00 +0100 |
| commit | 6e73cc0501e63fe9361b24a20d70a5a18857ef0d (patch) | |
| tree | cdaebd39058bb5e81eb951203a0320561be19fda | |
| parent | ef10c39550242ce1dc1ca974c8f01e23ebefd671 (diff) | |
Remove unwrap
| -rw-r--r-- | examples/11-transient-0/output/rust/src/gen/data/transient_0.rs | 12 | ||||
| -rw-r--r-- | src/main/java/org/zwobble/hobgoblin/compiler/output/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::<dyn ::std::any::Any + ::std::marker::Sync + ::std::marker::Send>); @@ -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::<dyn ::std::any::Any + ::std::marker::Sync + ::std::marker::Send>); @@ -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::<dyn ::std::any::Any + ::std::marker::Sync + ::std::marker::Send>); @@ -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::<dyn ::std::any::Any + ::std::marker::Sync + ::std::marker::Send>); @@ -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::<dyn ::std::any::Any + ::std::marker::Sync + ::std::marker::Send>); @@ -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::<dyn ::std::any::Any + ::std::marker::Sync + ::std::marker::Send>); 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( |
