@@ -69,54 +69,72 @@ impl FlightActions {
6969 self . actions . insert (
7070 path. clone ( ) ,
7171 Box :: new ( move |request| {
72- let mut deserializer = serde_json:: Deserializer :: from_slice ( request) ;
73- deserializer. disable_recursion_limit ( ) ;
74-
75- let deserializer = serde_stacker:: Deserializer {
76- de : & mut deserializer,
77- red_zone : recursive:: get_minimum_stack_size ( ) ,
78- stack_size : recursive:: get_stack_allocation_size ( ) ,
79- } ;
80-
81- let request = Req :: deserialize ( deserializer) . map_err ( |cause| {
82- ErrorCode :: BadArguments ( format ! (
83- "Cannot parse request for {}, cause: {:?}" ,
84- path, cause
85- ) )
86- } ) ;
72+ let request =
73+ match catch_unwind ( || -> std:: result:: Result < Req , serde_json:: Error > {
74+ let mut deserializer = serde_json:: Deserializer :: from_slice ( request) ;
75+ deserializer. disable_recursion_limit ( ) ;
76+
77+ let deserializer = serde_stacker:: Deserializer {
78+ de : & mut deserializer,
79+ red_zone : recursive:: get_minimum_stack_size ( ) ,
80+ stack_size : recursive:: get_stack_allocation_size ( ) ,
81+ } ;
82+
83+ Req :: deserialize ( deserializer)
84+ } ) {
85+ Ok ( Ok ( request) ) => Ok ( request) ,
86+ Ok ( Err ( cause) ) => Err ( ErrorCode :: BadArguments ( format ! (
87+ "Cannot parse request for {}, len: {}, cause: {:?}" ,
88+ path,
89+ request. len( ) ,
90+ cause
91+ ) ) ) ,
92+ Err ( cause) => Err ( cause. add_message_back ( format ! (
93+ "(while deserializing flight action request: action={}, len={})" ,
94+ path,
95+ request. len( )
96+ ) ) ) ,
97+ } ;
8798
8899 let path = path. clone ( ) ;
89100 let t = t. clone ( ) ;
90101 Box :: pin ( async move {
91102 let request = request?;
92103
93- let future = catch_unwind ( move || t ( request) ) ?;
104+ let future = catch_unwind ( move || t ( request) ) . map_err ( |cause| {
105+ cause. add_message_back ( format ! (
106+ "(while creating flight action future: action={})" ,
107+ path
108+ ) )
109+ } ) ?;
94110
95111 let future = CatchUnwindFuture :: create ( future) ;
96- match future
112+ let response = future
97113 . await
98- . with_context ( || "failed to do flight action" )
99- . flatten ( )
100- {
101- Ok ( v) => {
102- let mut out = Vec :: with_capacity ( 512 ) ;
103- let mut serializer = serde_json:: Serializer :: new ( & mut out) ;
104- let serializer = serde_stacker:: Serializer {
105- ser : & mut serializer,
106- red_zone : recursive:: get_minimum_stack_size ( ) ,
107- stack_size : recursive:: get_stack_allocation_size ( ) ,
108- } ;
109-
110- v. serialize ( serializer) . map_err ( |cause| {
111- ErrorCode :: BadBytes ( format ! (
112- "Cannot serialize response for {}, cause: {:?}" ,
113- path, cause
114- ) )
115- } ) ?;
116-
117- Ok ( out)
118- }
119- Err ( err) => Err ( err) ,
114+ . with_context ( || format ! ( "failed to do flight action, action: {}" , path) )
115+ . flatten ( ) ?;
116+
117+ match catch_unwind ( || -> std:: result:: Result < Vec < u8 > , serde_json:: Error > {
118+ let mut out = Vec :: with_capacity ( 512 ) ;
119+ let mut serializer = serde_json:: Serializer :: new ( & mut out) ;
120+ let serializer = serde_stacker:: Serializer {
121+ ser : & mut serializer,
122+ red_zone : recursive:: get_minimum_stack_size ( ) ,
123+ stack_size : recursive:: get_stack_allocation_size ( ) ,
124+ } ;
125+
126+ response. serialize ( serializer) ?;
127+ Ok ( out)
128+ } ) {
129+ Ok ( Ok ( out) ) => Ok ( out) ,
130+ Ok ( Err ( cause) ) => Err ( ErrorCode :: BadBytes ( format ! (
131+ "Cannot serialize response for {}, cause: {:?}" ,
132+ path, cause
133+ ) ) ) ,
134+ Err ( cause) => Err ( cause. add_message_back ( format ! (
135+ "(while serializing flight action response: action={})" ,
136+ path
137+ ) ) ) ,
120138 }
121139 } )
122140 } ) ,
0 commit comments