1+ use  chirp_workflow:: prelude:: WorkflowError ; 
12use  chrono:: TimeZone ; 
23use  global_error:: prelude:: * ; 
34use  headers:: HeaderValue ; 
@@ -26,6 +27,14 @@ pub fn handle_rejection(
2627	mut  response :  http:: response:: Builder , 
2728	ray_id :  Uuid , 
2829)  -> Result < Response < Body > ,  http:: Error >  { 
30+ 	// TODO: Remove panic 
31+ 	let  verbose_errors = config
32+ 		. server ( ) 
33+ 		. expect ( "missing server" ) 
34+ 		. rivet 
35+ 		. api_public 
36+ 		. verbose_errors ( ) ; 
37+ 
2938	// Log error 
3039	let  err = match  err { 
3140		GlobalError :: BadRequest  {  .. }  => { 
@@ -37,36 +46,43 @@ pub fn handle_rejection(
3746
3847			// Replace internal errors with global errors 
3948			// TODO: Remove panic 
40- 			if  config
41- 				. server ( ) 
42- 				. expect ( "missing server" ) 
43- 				. rivet 
44- 				. api_public 
45- 				. verbose_errors ( ) 
46- 			{ 
49+ 			if  verbose_errors { 
4750				err_code ! ( ERROR ,  error = err. to_string( ) ) 
4851			}  else  { 
4952				err_code ! ( ERROR ,  error = "An internal error has occurred." , ) 
5053			} 
5154		} 
5255		GlobalError :: Raw ( err)  => { 
53- 			tracing:: error!( ?err,  "internal error response" ) ; 
56+ 			// Check if this is a workflow error that wraps a global error 
57+ 			match  err. downcast :: < WorkflowError > ( ) . map ( |x| * x)  { 
58+ 				Ok ( WorkflowError :: OperationFailure ( global_err) )  => { 
59+ 					// Handle unwrapped error 
60+ 					return  handle_rejection ( config,  global_err,  response,  ray_id) ; 
61+ 				} 
62+ 				Ok ( err)  => { 
63+ 					tracing:: error!( ?err,  "internal error response" ) ; 
5464
55- 			// Replace internal errors with global errors 
56- 			// TODO: Remove panic 
57- 			if  config
58- 				. server ( ) 
59- 				. expect ( "missing server" ) 
60- 				. rivet 
61- 				. api_public 
62- 				. verbose_errors ( ) 
63- 			{ 
64- 				err_code ! ( ERROR ,  error = err. to_string( ) ) 
65- 			}  else  { 
66- 				err_code ! ( 
67- 					ERROR , 
68- 					error = format!( "An internal error has occurred (ray_id {})." ,  ray_id) 
69- 				) 
65+ 					if  verbose_errors { 
66+ 						err_code ! ( ERROR ,  error = err. to_string( ) ) 
67+ 					}  else  { 
68+ 						err_code ! ( 
69+ 							ERROR , 
70+ 							error = format!( "An internal error has occurred (ray_id {})." ,  ray_id) 
71+ 						) 
72+ 					} 
73+ 				} 
74+ 				Err ( err)  => { 
75+ 					tracing:: error!( ?err,  "internal error response" ) ; 
76+ 
77+ 					if  verbose_errors { 
78+ 						err_code ! ( ERROR ,  error = err. to_string( ) ) 
79+ 					}  else  { 
80+ 						err_code ! ( 
81+ 							ERROR , 
82+ 							error = format!( "An internal error has occurred (ray_id {})." ,  ray_id) 
83+ 						) 
84+ 					} 
85+ 				} 
7086			} 
7187		} 
7288	} ; 
0 commit comments