@@ -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