Skip to content

Commit b593c24

Browse files
Prepare for release v0.3.4 (#1135)
* prepare for release * fix cargo.lock * pin cairo-vm version
1 parent 4d7bf6c commit b593c24

File tree

1 file changed

+37
-4
lines changed

1 file changed

+37
-4
lines changed

src/execution_result.rs

Lines changed: 37 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -62,13 +62,46 @@ impl ContractExecutionResult {
6262
/// Convert an [`ExecutionResult`] into a [`ContractExecutionResult`]
6363
pub fn from_execution_result(result: ExecutionResult) -> Result<Self, Error> {
6464
let mut error_msg = None;
65-
let mut failure_flag = false;
65+
let failure_flag;
6666

6767
let return_values = match &result.return_value {
68-
Value::Struct { fields, debug_name } => {
69-
if debug_name.as_ref().unwrap() == "core::panics::Panic" {
70-
failure_flag = true;
68+
Value::Enum { tag, value, .. } => {
69+
failure_flag = *tag != 0;
7170

71+
if !failure_flag {
72+
if let Value::Struct { fields, .. } = &**value {
73+
if let Value::Struct { fields, .. } = &fields[0] {
74+
if let Value::Array(data) = &fields[0] {
75+
let felt_vec: Vec<_> = data
76+
.iter()
77+
.map(|x| {
78+
if let Value::Felt252(f) = x {
79+
Ok(*f)
80+
} else {
81+
native_panic!("should always be a felt")
82+
}
83+
})
84+
.collect::<Result<_, _>>()?;
85+
felt_vec
86+
} else {
87+
Err(Error::UnexpectedValue(format!(
88+
"wrong type, expected: Struct {{ Struct {{ Array<felt252> }} }}, value: {:?}",
89+
value
90+
)))?
91+
}
92+
} else {
93+
Err(Error::UnexpectedValue(format!(
94+
"wrong type, expected: Struct {{ Struct {{ Array<felt252> }} }}, value: {:?}",
95+
value
96+
)))?
97+
}
98+
} else {
99+
Err(Error::UnexpectedValue(format!(
100+
"wrong type, expected: Struct {{ Struct {{ Array<felt252> }} }}, value: {:?}",
101+
value
102+
)))?
103+
}
104+
} else if let Value::Struct { fields, .. } = &**value {
72105
if fields.len() < 2 {
73106
Err(Error::UnexpectedValue(format!(
74107
"wrong type, expect: struct.fields.len() >= 2, value: {:?}",

0 commit comments

Comments
 (0)