summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--examples/11-transient-0/output/rust/src/gen/data/transient_0.rs12
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttransient0/RustTransient0Generator.java14
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(