@@ -23,11 +23,26 @@ pub fn parse_req_id_from_request(request: &str) -> Result<u64, ErrorCode> {
2323
2424pub fn get_response ( response : & str ) -> Result < String , ErrorCode > {
2525 let val = str_to_val ( response) ?;
26- let object = val_to_obj ( & val) ?;
27- let result = get_val_from_obj ( object, "result" ) ?;
28- let result_obj = val_to_obj ( result) ?;
29- let req_id = get_val_from_obj ( result_obj, "reqId" ) ?;
30- let req_id = val_to_u64 ( req_id) ?;
26+
27+ let req_id = match val[ "result" ] [ "ver" ] . as_str ( ) {
28+ Some ( "1" ) =>
29+ val. get ( "result" )
30+ . and_then ( |result| result. as_object ( ) )
31+ . and_then ( |result| result. get ( "txn" ) )
32+ . and_then ( |txn| txn. as_object ( ) )
33+ . and_then ( |txn| txn. get ( "metadata" ) )
34+ . and_then ( |metadata| metadata. as_object ( ) )
35+ . and_then ( |metadata| metadata. get ( "reqId" ) )
36+ . and_then ( |req_id| req_id. as_i64 ( ) ) ,
37+ None =>
38+ val. get ( "result" )
39+ . and_then ( |result| result. as_object ( ) )
40+ . and_then ( |result| result. get ( "reqId" ) )
41+ . and_then ( |req_id| req_id. as_i64 ( ) ) ,
42+ _ => return Err ( ErrorCode :: CommonInvalidState )
43+ } ;
44+
45+ let req_id = req_id. ok_or ( ErrorCode :: CommonInvalidStructure ) ?;
3146
3247 let mut responses = RESPONSES . lock ( ) . unwrap ( ) ;
3348 match responses. remove ( req_id. to_string ( ) . as_str ( ) ) {
0 commit comments